我想调用位于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
在我看来,这是一个路径问题。
我做错了什么?
感谢。
答案 0 :(得分:2)
您无法在jar文件中执行可执行文件。您必须在致电Runtime.getRuntime().exec()
之前提取它。
再想一想,Runtime.getRuntime().exec()
使用您的操作系统功能。您的操作系统不了解.jar
文件。你必须提取它。
答案 1 :(得分:0)
仅仅从你模糊的描述中,为什么你认为你的应用程序的密码与封锁所在的文件夹相同?它看起来像你从.class运行它,所以你可能想要至少
Process p = Runtime.getRuntime().exec("../closures/bin/javac " + filename);
但这仍然不是调用它的最强大方式。