![](/img/trans.png)
[英]Java program can't execute file it writes to /tmp, no such file or directory
[英]Can't execute a command: no such file or directory / Java
我正在嘗試通過另一個程序運行.jar
文件。 例如,我有一個HelloWorld.jar
文件,它將打開一個對話框,顯示“ Hello World”。 我有一個Test.jar
程序。 當我在Test.jar
執行某項操作(即單擊某些按鈕)時,它應運行HelloWorld.jar
。
我目前這樣做的方式是使用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%確定文件和目錄都存在 ,甚至檢查了一下。 如您在此處的錯誤中所見,還有一條調試消息證明了這一點。
我的命令執行代碼:
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;
}
}
此方法本身的用法:
Utils.execute(bin.getAbsolutePath().replace(bin.getName(), ""), "java -jar " + bin.getName(), false);
我在StackOverflow或其他任何地方都找不到針對此問題的有用答案。 希望有解決此問題的解決方案。
ProcessBuilder
構造函數接受List<String>
或varargs(多個字符串),例如
new ProcessBuilder( "command", "arg1", "arg2", "arg3" );
您沒有嘗試將命令和參數分別傳遞給它,而是嘗試將命令和參數一起傳遞給它在同一字符串中。
構建器將第一個參數解釋為命令的名稱。 因此,它認為您正在嘗試運行名為java -jar Amnesia.jar
的文件。 它認為您只是有一個可執行文件,其名稱中帶有空格。 但是,當然,操作系統找不到這樣的可執行文件。
您應該執行的操作是使用與命令分開的參數運行命令,即:
new ProcessBuilder( "java", "-jar", "Amnesia.jar" );
因此,您需要重新構造execute
方法,以便cmd
參數是List<String>
,數組( String[]
),或者它是最后一個參數並且是varargs參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.