java.lang.ExceptionInInitializerError(Idea中运行正常, jar包运行报此错误)
现有一个AAA
类, 其中有个静态成员变量custCount
, 是个原子类.
然后再另一个类中使用到了.
按理说, 在调用这个成员变量时, 会去加载这个AAA
类, 然后初始化.
在Idea中本地debug时确实这么执行的.
但是打成jar包后, 通过java -jar xxx
运行时, 就会报异常: java.lang.ExceptionInInitializerError
.
好诡异的错误.
异常:
一更:
经过测试有新的发现, 貌似是因为在初始化edgeCount
和custCount
变量之前有一行:private static final String STAT_FILE_NAME1 = AAA.class.getClassLoader().getResource("").getPath() + "stat/stat.txt";
原来AAA.class.getClassLoader().getResource("")
在jar包运行时得到的是null. 这就导致了这行代码报NullPointerException. 同时因为是静态成员, 所以会被ExceptionInInitializerError
'掩盖'NullPointer异常.
另外我发现:
AAA.class.getClassLoader().getResource("")
拿不到任何东西.AAA.class.getResource("")
可以拿到路径(带jar包名的路径).
!不知道是什么原因!.
总结:
我的目的是是要获取jar包所在的路径, 用这种getResource()
的方式在jar包运行模式下不能够满足我的需求.
之前实验过: new File("")
可以获取到jar包所在路径的, 不纠结了, 暂时用这个方式吧~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ExceptionInInitializerError,导致这个可能性比较多
看你这个IDE里面没有问题,JAR包报错,然后代码里面有一行加载resource的,
是加载的本地配置文件吗,看一下打jar包的时候是不是没有包含进去