我创建了一个客户端程序,它使用Netty通过TCP套接字下载.jar并创建一个新的JarInputStream实例
当我初始化程序时,一切都会加载,直到它抛出一个MissingResourceException时才会连接数据库。
通常通过terminal / commandprompt运行时,原始jar(通过netty发送的jar)运行正常。我至少认为这不是我的代码中的一个问题。
我使用HikariCP进行数据库池化,当连接到数据库时,它会抛出这个堆栈跟踪:
Caused by: java.lang.ExceptionInInitializerError
at com.mysql.jdbc.ConnectionPropertiesImpl.<clinit>(ConnectionPropertiesImpl.java:586)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:117)
at com.zaxxer.hikari.pool.PoolUtilities.initializeDataSource(PoolUtilities.java:110)
at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:157)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48)
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80)
Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale nl_NL
at com.mysql.jdbc.Messages.<clinit>(Messages.java:54)
... 38 more
Caused by: java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale nl_NL
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:721)
at com.mysql.jdbc.Messages.<clinit>(Messages.java:52)
... 38 more
我正在使用:
mysql-connector-java:5.1.37 HikariCP-java6:2.3.12
我可以确认LocalizedErrorMessages.properties文件确实在com / mysql / jdbc中。
类加载器我使用:http://pastebin.com/9VsV32Yg
从终端/命令提示符执行时,原始jar运行正常。 原始jar中的入口点在我的TCP应用程序中正确执行,因为我可以看到它出现在控制台中的启动输出。
希望有人知道导致这个问题的原因。
答案 0 :(得分:0)
您需要实现公共URL getResource(String name)和各种其他资源API。 ClassLoader不仅可以加载类,还可以访问JAR中包含的其他资源。