Android на Eclipse падает каждый раз, когда я открываю main.xml

У меня есть ADT, загруженный в классический Eclipse. Я выполнил шаги из начального руководства Android Helloworld, расположенного здесь: http://developer.android.com/resources/tutorials/hello-world.html

Проблема возникает каждый раз, когда я загружаю main.xml. Похоже, это проблема с плагином ADT, поскольку он связан с редактором макета графического интерфейса, который у него есть (тот, который создает XML в фоновом режиме). Если я обращаюсь к источнику XML напрямую, он не падает.

Я получил разные сообщения об ошибках, нехватку памяти, отсутствие информации о выходе и «исключение в постоянном пространстве checkandloadtargetdata». Если у вас есть какие-либо вопросы о моей настройке, не стесняйтесь оставлять их в комментариях, и я обновлю ветку.

Я использую Windows 7 x64 бит с довольно чистой установкой. У меня также есть JDK 1.6. Вот текст из файла .log Eclipse, расположенного в .metadata. Любая помощь будет оценена по достоинству.

!SESSION 2011-08-14 13:11:38.628 -----------------------------------------------
eclipse.buildId=I20110613-1736
java.version=1.6.0_26
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -debug -console -consoleLog

!ENTRY org.eclipse.ui 4 0 2011-08-14 13:11:51.038
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:260)
    at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:63)
    at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:327)
    at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229)
    at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
    at org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:198)

!ENTRY com.android.ide.eclipse.adt 4 0 2011-08-14 13:11:51.043
!MESSAGE Exception in checkAndLoadTargetData.
!STACK 0
java.lang.OutOfMemoryError: PermGen space

!ENTRY org.eclipse.ui 4 0 2011-08-14 13:11:51.056
!MESSAGE Error occurred during status handling
!STACK 0
java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:601)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.ui.statushandlers.StatusManager.getStatusHandler(StatusManager.java:135)
    at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:189)
    at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:231)
    at org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:242)
    at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopException(WorkbenchAdvisor.java:326)
    at org.eclipse.ui.internal.ExceptionHandler.handleException(ExceptionHandler.java:65)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2700)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)

!ENTRY org.eclipse.ui 4 4 2011-08-14 13:13:59.256
!MESSAGE Invalid preference page path: XML Syntax

!ENTRY com.android.ide.eclipse.adt 4 0 2011-08-14 13:13:59.263
!MESSAGE Parsing Data for android-7 failed
!STACK 0
java.lang.OutOfMemoryError: PermGen space

Попробовав приведенные ниже настройки eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Xms2048m
-Xmx2048m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:+UseParallelGC

Теперь я получаю что-то новое, поскольку main.xml уже «открыт», если я полностью открою Eclipse и просто позволю ему несколько секунд поработать, ничего не делая, появится редактор графического интерфейса и, похоже, работает нормально. Если я нажму на что-нибудь еще (например, на вкладку для HelloAndroid.java), он заблокируется и вылетит.


person Jazzepi    schedule 14.08.2011    source источник
comment
Это похоже на ошибку, о которой следует сообщить Eclipse.   -  person Yuliy    schedule 14.08.2011


Ответы (4)


Я думаю, вам нужно увеличить размер PermGen. Есть статья на Затмение Вики. 1024 м будет достаточно.
Во всяком случае, мой eclipse.ini тоже должен помочь.

cat /opt/eclipse/eclipse.ini
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.100.v20110505
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vmargs
-Xms2048m
-Xmx2048m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:+UseParallelGC
person 4e6    schedule 14.08.2011
comment
На самом деле теперь он позволяет мне открыть Eclipse с уже открытым файлом main.xml на панели инструментов, и редактор графического интерфейса работает нормально. Теперь он вылетает, когда я пытаюсь перейти на другую вкладку. - person Jazzepi; 14.08.2011
comment
Это странно, кажется, что-то идет не так, и у вас заканчивается память. Я могу только посоветовать запустить eclipse с флагом -clean, очистить проект, удалить лишние плагины, переустановить eclipse или windows или установить linux;) И посмотрите на свой xml-файл, возможно, в нем есть какие-то ошибки, и eclipse не может его правильно проанализировать. И после увеличения PermGen у вас все еще есть исключение OutOfMemoryError или что-то еще? - person 4e6; 14.08.2011
comment
Когда я попытался что-то погуглить, я заметил, что OutOfMemoryErrors появлялись в более ранних версиях плагинов eclipse и adt. Так что эта проблема больше похожа на ошибку, чем на вашу ошибку. - person 4e6; 15.08.2011

Вы должны обновить свою версию jdk до последней версии. Я обнаружил, что большинство случаев в Интернете заключается в том, что jdk5 вызвал сбой eclipse, и они сработали путем обновления до jdk6. Я использовал jdk6, но проблема существовала! Наконец я загружаю последнюю версию (jdk7) и затмение больше не падает!

person Jun    schedule 20.08.2012

Я удалил SDK, удалил установку Eclipse и все переустановил.

Заметные вещи, которые я изменил.

- Я переместил установку Eclipse из каталога программных файлов, так как я знаю, что Windows относится к этому по-разному. Теперь он находится в C:/Eclipse.

- Я переместил Android SDK из каталога программных файлов по тем же причинам и убедился, что в пути нет пробелов. Теперь он находится в C:/androidSDK/

Кажется, сейчас работает нормально. Интересно, был ли это конфликт между eclipse, находящимся в одном из каталогов программных файлов, и SDK, находящимся в другом. Я не знаю, загружает ли Windows эти программы по-разному в зависимости от того, в каком каталоге они находятся. В любом случае, если у вас возникла подобная проблема, переместите их из каталога программных файлов.

person Jazzepi    schedule 15.08.2011
comment
Насколько я знаю, это происходит, когда вы устанавливаете некоторые плагины EE на тот же Eclipse, что и плагин Android, и, если быть более конкретным, это также произошло со мной после установки плагина JavaScript! - person TacB0sS; 18.08.2013

Попробовав ответы в этом посте. Это сработало для меня в Windows 7 x64 бит и JDK 1.7 - удалите проблемный Eclipse (Mars Java + ADT) и переустановите. Я не вносил изменений в PermSize, но у меня есть -Xms512m -Xmx1024m в файле eclipse.ini. Исходное рабочее пространство тоже загрузилось нормально.

person G O'Rilla    schedule 27.07.2015