我想通過另一個程序運行.jar
文件。例如,我有一個HelloWorld.jar
文件,它打開一個對話框,顯示「Hello World」。我有一個Test.jar
程序。當我在Test.jar
中做某些事情時(即點擊某個按鈕),它應該運行HelloWorld.jar
。無法執行命令:沒有這樣的文件或目錄/ Java
我現在這樣做的方式是使用ProcessBuilder
運行終端命令java -jar HelloWorld.jar
。不過,我得到這個錯誤:
Debug: "C:\Users\Asus\.fairplay\data\apps\Amnesia\.tmp524\.bin" exists: true
java.io.IOException: Cannot run program "java -jar Amnesia.jar" (in directory "C:\Users\Asus\.fairplay\data\apps\Amnesia\.tmp524\.bin"): CreateProcess error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at me.darksidecode.fairplay.client.util.Utils.execute(Utils.java:74)
at me.darksidecode.fairplay.client.app.AppLauncher.launch0(AppLauncher.java:61)
at me.darksidecode.fairplay.client.app.AppLauncher.launch(AppLauncher.java:37)
at me.darksidecode.fairplay.client.app.AppLoader.downloadAndRun(AppLoader.java:28)
at me.darksidecode.fairplay.client.gui.frame.GuiLauncher.onPacketReceiving(GuiLauncher.java:165)
at me.darksidecode.fairplay.client.core.FairPlayClient.lambda$processPacket$1(FairPlayClient.java:120)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: CreateProcess error=2, No such file or directory
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 7 more
我100%確保這兩個文件並存在的目錄,我甚至檢查了。正如你在這裏的錯誤中看到的那樣,還有一個調試消息證明了這一點。
我的命令執行代碼:
Utils.execute(bin.getAbsolutePath().replace(bin.getName(), ""), "java -jar " + bin.getName(), false);
我還沒有發現任何有用的答案StackOverflow上這個問題或其他地方尚未:
public static Process execute(final String path, final String cmd, final boolean removeJavaOptions) {
File f = Files.getFile(path);
System.out.println("Debug: \"" + f.getAbsolutePath() + "\" exists: " + f.exists());
try {
final ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(Files.getFile(path));
pb.redirectErrorStream(true);
if (removeJavaOptions)
pb.environment().remove("_JAVA_OPTIONS");
return pb.start();
} catch (final Exception ex) {
ex.printStackTrace();
return null;
}
}
這種方法本身的使用。希望有一個解決方案來解決這個問題。