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

Java开发Telegram Bot遭遇ExceptionInInitializerError异常求助

问题分析与解决方案

这个异常的核心原因是Java 9及以上版本的模块系统,与你使用的旧版依赖库(尤其是Guice/CGLIB)不兼容。

从栈信息里的InaccessibleObjectException可以看到:Java模块系统默认禁止未命名模块(你的项目属于这个模块)访问java.base模块里的java.lang.ClassLoader.defineClass方法,而旧版本的Guice依赖的CGLIB库会尝试通过反射调用这个受保护的方法来生成动态代理,这就触发了访问限制。另外,这个问题和你配置的Telegram代理没有关系——代理问题只会导致网络连接类异常,不会抛出这类反射访问错误。

下面是几种可行的解决办法:

  • 降级到Java 8运行项目
    Java 8没有模块系统,不存在这种访问限制,是最直接的解决方式。在Eclipse里操作:

    1. 右键项目 → Properties → Java Build Path → Libraries,把JRE System Library换成Java 8版本。
    2. 打开Run Configurations,找到你的主类运行配置,在JRE标签下选择Java 8作为运行环境。
  • 升级依赖库到兼容Java 9+的版本
    检查你的项目依赖:

    1. 如果你使用的是官方Telegram Bots库(org.telegram:telegrambots),升级到最新稳定版(比如6.x及以上),新版本已经适配了Java 9+的模块规则。
    2. 如果你直接依赖Guice,确保版本在4.2.0及以上——这个版本开始修复了模块系统下的反射访问问题。
  • 添加JVM启动参数(临时 workaround)
    如果暂时无法升级依赖或降级Java,可以通过JVM参数强制开放模块访问权限:
    在Eclipse的Run Configurations里,找到你的运行配置,切换到Arguments标签,在VM arguments中添加:

    --add-opens java.base/java.lang=ALL-UNNAMED
    

    这个参数会允许未命名模块访问java.base模块里的java.lang包,临时绕过这个限制,但不推荐长期使用,还是建议升级依赖或降级Java。

内容的提问来源于stack exchange,提问作者Harmonic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:52:45