.jar文件中的路径问题

时间:2010-11-13 01:11:36

标签: java jar

我想调用位于Java应用程序内部文件夹中的编译器(非标准)。所以我写了这段代码:

Process p = Runtime.getRuntime().exec("closures/bin/javac " + filename);

有效! 但是现在我想将这个编译器和我的.class文件打包在一个.jar文件中。我的文件夹结构是这样的:

  • .class(很多课程)

  • 闭包/(文件夹)

但是当执行上面从jar文件中提到的行(对子文件夹中的编译器的调用)时,我得到了这个:

Exception in thread "main" java.io.IOException: Cannot run program "closures/bin/javac": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
at java.lang.Runtime.exec(Runtime.java:610)
at java.lang.Runtime.exec(Runtime.java:448)
at java.lang.Runtime.exec(Runtime.java:345)
at Main.main(Main.java:44)

Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
... 4 more

在我看来,这是一个路径问题。

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

您无法在jar文件中执行可执行文件。您必须在致电Runtime.getRuntime().exec()之前提取它。

再想一想,Runtime.getRuntime().exec()使用您的操作系统功能。您的操作系统不了解.jar文件。你必须提取它。

答案 1 :(得分:0)

仅仅从你模糊的描述中,为什么你认为你的应用程序的密码与封锁所在的文件夹相同?它看起来像你从.class运行它,所以你可能想要至少

Process p = Runtime.getRuntime().exec("../closures/bin/javac " + filename);

但这仍然不是调用它的最强大方式。