我试图在使用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
),但没有成功。
解决了
我没有意识到directory()方法只是为新的子进程设置工作目录,你仍然需要为你要运行的可执行文件提供一个完整的路径。
在这种情况下,下面的代码就可以了。
Process process = new ProcessBuilder("C:\\Program Files\\Mozilla Firefox\\firefox")
.directory(new File("C:\\Program Files\\Mozilla Firefox"))
.inheritIO()
.start();