java.lang.ExceptionInInitializerError(Idea中运行正常, jar包运行报此错误)

发布于 2022-09-07 23:44:56 字数 1564 浏览 38 评论 0

现有一个AAA类, 其中有个静态成员变量custCount, 是个原子类.
然后再另一个类中使用到了.
按理说, 在调用这个成员变量时, 会去加载这个AAA类, 然后初始化.
在Idea中本地debug时确实这么执行的.
但是打成jar包后, 通过java -jar xxx运行时, 就会报异常: java.lang.ExceptionInInitializerError.

好诡异的错误.

AAA类

使用到的类

异常:

clipboard.png


一更:

经过测试有新的发现, 貌似是因为在初始化edgeCountcustCount变量之前有一行:
private static final String STAT_FILE_NAME1 = AAA.class.getClassLoader().getResource("").getPath() + "stat/stat.txt";

原来AAA.class.getClassLoader().getResource("")在jar包运行时得到的是null. 这就导致了这行代码报NullPointerException. 同时因为是静态成员, 所以会被ExceptionInInitializerError'掩盖'NullPointer异常.

clipboard.png

另外我发现:

  • AAA.class.getClassLoader().getResource("")拿不到任何东西.
  • AAA.class.getResource("")可以拿到路径(带jar包名的路径).

!不知道是什么原因!.

clipboard.png

总结:
我的目的是是要获取jar包所在的路径, 用这种getResource()的方式在jar包运行模式下不能够满足我的需求.

之前实验过: new File("")可以获取到jar包所在路径的, 不纠结了, 暂时用这个方式吧~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睫毛上残留的泪 2022-09-14 23:44:56

ExceptionInInitializerError,导致这个可能性比较多
看你这个IDE里面没有问题,JAR包报错,然后代码里面有一行加载resource的,
是加载的本地配置文件吗,看一下打jar包的时候是不是没有包含进去

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文