Java - 当使用ProcessBuilder directory()时,系统无法找到指定的文件。

问题描述 投票:0回答:1

我试图在使用ProcessBuilder的directory()方法时,在Java中运行一个子进程,但是,每当我使用directory()方法时,程序就会失败,说找不到文件。然而,文件是存在于工作目录中的。

Process process = new ProcessBuilder("firefox")
                    .directory(new File("C:\\Program Files\\Mozilla Firefox"))
                    .inheritIO()
                    .start();

输出。

Could not start server due to java.io.IOException: Cannot run program "firefox" (in directory "C:\Program Files\Mozilla Firefox"): CreateProcess error=2, The system cannot find the file specified

当我删除目录()方法并创建一个类似ProcessBuilder的程序时. : new ProcessBuilder("C:\\Program Files\\Mozilla Firefox\\firefox")它工作正常,firefox.exe成功启动。

这种情况在Windows和Linux上都会发生。

我已经尝试了几个版本的启动命令(如 firefox, firefox.exe, ./firefox, ./firefox.exe),但没有成功。

java processbuilder
1个回答
0
投票

解决了

我没有意识到directory()方法只是为新的子进程设置工作目录,你仍然需要为你要运行的可执行文件提供一个完整的路径。

在这种情况下,下面的代码就可以了。

Process process = new ProcessBuilder("C:\\Program Files\\Mozilla Firefox\\firefox")
                    .directory(new File("C:\\Program Files\\Mozilla Firefox"))
                    .inheritIO()
                    .start();
© www.soinside.com 2019 - 2024. All rights reserved.