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" );