1

标题说明了一切。

我必须在终端中运行我的 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

我想我应该专注于这个文件的事情。

如果您有任何解决方案或很好的参考,请分享。

:D 谢谢。

================ 得到一些反馈后============================== === 谢谢。

也许这部分可以成为一个线索。

我的命令行是

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)

这些都是事实。1.我在eclipse中做了一个可执行的jar。2. iis.properties 文件正好在那个路径中(IISDB_C.jar!/com/zinnaworks/iis/conf/iis.properties),但我不知道那个'!' 意味着 3. 每个其他文件都会犯同样的错误,因为它们都是由属性文件中定义的 String 初始化的。

PS 我不知道如何使用 -Dmp 选项。所有路径都是在相对路径中设计的,并且包含在该 jar 文件中。

4

2 回答 2

2

很难说出你的问题到底是什么,看看你的堆栈跟踪我可以看到:

  • ANullPointerException被抛出java.io.File,第 251 行。我查看了此类的源代码,您的应用程序似乎尝试File使用构造函数创建一个对象File(pathname),但路径名为空,所以我想您需要指定一个文件名当您在控制台中执行程序时未指定应用程序中的某个位置(可能是属性文件?)。

  • 该行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 文件)。

在这种情况下,堆栈跟踪表明在您的 jar 中找不到文件 /com/zinnaworks/iis/conf/iis.properties。

尝试解压缩 jar 以验证您的属性文件是否丢失。如果您知道如何操作,请添加属性文件并再次“重新压缩”所有内容(一个肮脏的解决方案,但在某些情况下有效)并重试。

如果事实证明这是您的错误,那么您必须找出如何在生成该属性文件时将其包含在您的 jar 中。

于 2013-07-29T02:44:27.173 回答
0

我用 InputStream 对象解决了这个问题。坦率地说,我不知道为什么我们必须使用它,但成功才能正常工作。这是我编辑的代码。

InputStream in = PropertyLoader.class.getResourceAsStream("/your/package/right/here/property.files");
            prop.load(in);
            in.close();

无论如何感谢@morgano。没有他的建议,我找不到哪个部分有问题:D

于 2013-07-30T03:02:16.370 回答