标题告诉所有人。
我必须在终端中运行我的java应用程序项目。
所以我在Eclipse中制作了可执行jar。
我已经尝试过三种选择。
但我的错误并没有消失。
这个程序在eclipse中运行得很好但是当我在Executable jar形式中运行时会出错。
下面附有消息。
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NullPointerException
at java.io.File.<init>(File.java:251)
at com.zinnaworks.iis.DBFileLoader.loadDBFile(DBFileLoader.java:17)
at com.zinnaworks.iis.Main.main(Main.java:23)
... 5 more
我想我应该专注于这个文件。
如果您有任何解决方案或不错的参考资料,请分享。
:谢谢。
================得到一些反馈后=========================== ====== 感谢。
也许这部分可能是一个线索。
我的命令行是
java -jar IISDB_C.jar
结果:
java.io.FileNotFoundException: file:/home/juneyoungoh/IISDB_C.jar!/com/zinnaworks/iis/conf/iis.properties (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at com.zinnaworks.iis.conf.PropertyLoader.loadProp(PropertyLoader.java:14)
at com.zinnaworks.iis.Main.main(Main.java:21)
这些都是事实。
我在日食中制作了一个可执行的罐子。
2. iis.properties文件正好在该路径中(IISDB_C.jar!/com/zinnaworks/iis/conf/iis.properties),但我不知道那是什么'!'手段
3.每个其他文件都会产生相同的错误,因为它们都是由属性文件中定义的String初始化的。
P.S 我不知道如何使用-Dmp选项。所有路径都是按相对路径设计的,它包含在该jar文件中。
答案 0 :(得分:2)
很难说出你的问题究竟是什么,看看你的堆栈跟踪我可以看到:
在NullPointerException
第251行引用java.io.File
。我查看了此类的源代码,您的应用程序似乎尝试创建File
使用构造函数File(pathname)
的对象,但 pathname 为null,所以我猜你需要在你的应用程序的某个地方指定一个文件名(属性文件可能?),当时没有指定你在控制台中执行你的程序。
第at com.zinnaworks.iis.DBFileLoader.loadDBFile(DBFileLoader.java:17)
行告诉我你正在使用一种试图找到其数据库文件的数据库;再次,您需要找到您为数据库指定文件的位置。
就是这样,对不起,如果没有其他我可以帮助你。
更新
通常当你看到像/my/path/myJar.jar!/internal/path/file
这样的行时,它意味着:“文件/internal/path/file
位于/my/path/myJar.jar内部”(请记住,jar文件是包含文件的zip文件)
在这种情况下,stacktrace说你的jar里面找不到文件/com/zinnaworks/iis/conf/iis.properties。
尝试解压缩jar只是为了验证您的属性文件是否丢失。如果您知道如何操作,那么添加属性文件并再次“重新压缩”所有内容(一种肮脏的解决方案,但在某些情况下有效)并再试一次。
如果事实证明这是你的错误,那么你必须找出如何在生成它时在你的jar中包含该属性文件。
答案 1 :(得分:0)
我用InputStream Object解决了这个问题。 坦率地说,我不知道为什么我们必须使用它,但成功地正常工作。 这是我编辑的代码。
InputStream in = PropertyLoader.class.getResourceAsStream("/your/package/right/here/property.files");
prop.load(in);
in.close();
无论如何感谢@morgano。 没有他的建议,我找不到哪个部分有问题:D