Can';t执行命令:没有这样的文件或目录/Java

Can';t执行命令:没有这样的文件或目录/Java,java,jar,process,terminal,Java,Jar,Process,Terminal,我正试图通过另一个程序运行.jar文件。例如,我有一个HelloWorld.jar文件,它打开一个对话框说“HelloWorld”。我有一个Test.jar程序。当我在Test.jar中执行某些操作时(即单击某个按钮),它应该运行HelloWorld.jar 我目前这样做的方式是使用ProcessBuilder运行终端命令java-jar HelloWorld.jar。但是,我得到了这个错误: Debug: "C:\Users\Asus\.fairplay\data\apps\Amnesia\.

我正试图通过另一个程序运行
.jar
文件。例如,我有一个
HelloWorld.jar
文件,它打开一个对话框说“HelloWorld”。我有一个
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
此方法本身的用法:

Utils.execute(bin.getAbsolutePath().replace(bin.getName(), ""), "java -jar " + bin.getName(), false);

我还没有在StackOverflow或其他任何地方找到任何有用的答案。希望有一个解决方案。

ProcessBuilder构造函数接受
列表或varargs(多个字符串),例如

您没有将命令和参数分别传递给它,而是尝试将命令和参数以相同的字符串传递给它

生成器将第一个参数解释为命令的名称。因此,它认为您正在尝试运行一个名为
java-jar-Amnesia.jar
的文件。它认为您只是拥有一个名称中带有空格的可执行文件。当然,操作系统找不到这样的可执行文件

您应该使用与命令分开的参数运行命令,即:

new ProcessBuilder( "java", "-jar", "Amnesia.jar" );

因此,您需要重新构造
execute
方法,以便
cmd
参数是
List
、数组(
String[]
),或者它是最后一个参数并且是varargs参数。

ProcessBuilder
构造函数接受
List
或varargs(多个字符串),例如

您没有将命令和参数分别传递给它,而是尝试将命令和参数以相同的字符串传递给它

生成器将第一个参数解释为命令的名称。因此,它认为您正在尝试运行一个名为
java-jar-Amnesia.jar
的文件。它认为您只是拥有一个名称中带有空格的可执行文件。当然,操作系统找不到这样的可执行文件

您应该使用与命令分开的参数运行命令,即:

new ProcessBuilder( "java", "-jar", "Amnesia.jar" );
因此,您需要重新构造
execute
方法,以便
cmd
参数是
List
、数组(
String[]
),或者是最后一个参数,是varargs参数

new ProcessBuilder( "java", "-jar", "Amnesia.jar" );