获取错误文件。<init>在Ubuntu终端</init>中运行可执行jar时

时间:2013-07-29 02:10:31

标签: java eclipse file terminal init

标题告诉所有人。

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

2 个答案:

答案 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