You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:50:22