Eclipse启动报错:“发生错误,请查看日志文件”求助
问题描述
Eclipse提示“发生错误,请查看日志文件”,日志路径为
C:\Program Files\Android\adt-bundle-windows-x86_64-20130219\eclipse\configuration\1663787406897.log。具体日志内容如下:
!SESSION 2022-09-21 16:03:50.380 ----------------------------------------------- eclipse.buildId=v21.1.0-569685 java.version=19 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=pt_BR Framework arguments: -XX:-UseCompressedOops -product com.android.ide.eclipse.adt.package.product Command-line arguments: -os win32 -ws win32 -arch x86_64 -XX:-UseCompressedOops -product com.android.ide.eclipse.adt.package.product !ENTRY org.eclipse.osgi 4 0 2022-09-21 16:03:50.631 !MESSAGE error loading hook: org.eclipse.osgi.internal.baseadaptor.BaseHookConfigurator !STACK 0 java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @62043840 at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:387) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:363) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:311) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:201) at java.base/java.lang.reflect.Method.setAccessible(Method.java:195) at org.eclipse.osgi.internal.baseadaptor.BaseStorage.findMethod(BaseStorage.java:174) at org.eclipse.osgi.internal.baseadaptor.BaseStorage.findMethod(BaseStorage.java:181) at org.eclipse.osgi.internal.baseadaptor.BaseStorage.findAddURLMethod(BaseStorage.java:165) at org.eclipse.osgi.internal.baseadaptor.BaseStorage.<init>(BaseStorage.java:135) at org.eclipse.osgi.internal.baseadaptor.BaseHookConfigurator.addHooks(BaseHookConfigurator.java:24) at org.eclipse.osgi.baseadaptor.HookRegistry.loadConfigurators(HookRegistry.java:178) at org.eclipse.osgi.baseadaptor.HookRegistry.initialize(HookRegistry.java:100) at org.eclipse.osgi.baseadaptor.BaseAdaptor.<init>(BaseAdaptor.java:98) at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:484) at org.eclipse.core.runtime.adaptor.EclipseStarter.createAdaptor(EclipseStarter.java:737) at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:258) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) !ENTRY org.eclipse.osgi 4 0 2022-09-21 16:03:50.690 !MESSAGE Startup error !STACK 1 java.lang.NullPointerException: Cannot invoke "org.eclipse.osgi.internal.baseadaptor.BaseStorage.initialize(org.eclipse.osgi.baseadaptor.BaseAdaptor)" because "this.storage" is null at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage(BaseAdaptor.java:123) at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:192) at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:262) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
问题原因
你使用的Eclipse ADT是2013年的v21.1.0版本,属于非常老旧的版本,完全不兼容Java 9及以上版本(包括当前使用的Java 19)。Java 9引入的模块系统(JPMS)会限制反射访问JDK内部API,而旧版ADT的底层代码依赖反射调用URLClassLoader.addURL()方法,这直接触发了日志中的InaccessibleObjectException,后续的空指针异常是加载钩子失败导致的连锁反应。
解决办法
1. 降级Java版本(推荐)
旧版ADT仅支持Java 7或Java 8,操作步骤:
- 下载Java 8(Oracle JDK 8或OpenJDK 8均可),安装到本地路径,比如
C:\Program Files\Java\jdk1.8.0_301 - 打开Eclipse安装目录,找到
eclipse.ini文件,用文本编辑器打开 - 在
-vmargs这一行之前添加以下两行,指定Java 8的javaw.exe路径:-vm C:\Program Files\Java\jdk1.8.0_301\bin\javaw.exe - 保存文件后重启Eclipse即可
2. 尝试添加Java启动参数(不推荐,稳定性差)
如果暂时不想降级Java,可以尝试添加模块权限参数强制开放反射访问:
- 打开
eclipse.ini,在-vmargs后面追加以下参数:--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED - 保存后重启,但这种方法可能会引发其他兼容性问题,因为旧版ADT和高版本Java的底层差异过大
3. 迁移到Android Studio(长远最优)
ADT Bundle已经被官方废弃多年,推荐直接迁移到Android Studio,它支持最新的Java/Kotlin版本、Android开发特性,完全兼容现代Java环境,是当前官方推荐的Android开发工具。
内容的提问来源于stack exchange,提问作者Raonic
相关产品推荐
相关产品推荐

