从 main() 中启动应用程序.一起或单独指定路径和文件名



据我了解,try 块中的前两个语句应该具有相同的效果;启动 chrome.exe,但第一个语句会导致 IO 异常,因为它找不到 chrome.exe。我做错了什么吗?

import java.io.File;
public class Program
{
    public static void main( final String[] args )
    {
            try
            {
                //Process process = Runtime.getRuntime().exec("chrome.exe", null, new File("C:\Program Files (x86)\Google\Chrome\Application\"));
                Process process = Runtime.getRuntime().exec("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe");
                process.waitFor();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
    }
}

堆栈跟踪:

java.io.IOException: Cannot run program "chrome.exe" (in directory "C:Program Files (x86)GoogleChromeApplication"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at java.lang.Runtime.exec(Runtime.java:620)
    at java.lang.Runtime.exec(Runtime.java:450)
    at Program.main(Program.java:16)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    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)
    ... 3 more

在您的第一个示例中,将"chrome.exe"更改为"notepad.exe",如下所示:

Process process = Runtime.getRuntime().exec("notepad.exe", null, new File("C:\Program Files (x86)\Google\Chrome\Application\"));

你会看到这有效。 这是因为"记事本.exe"所在的目录位于 Windows 路径环境变量中。

问题是,使用 Runtime.exec(String command, String[] envp, File dir) 方法执行时,您仍然需要在 Path 环境变量中执行可执行文件。 所以我继续向我的 Path 添加C:Program Files (x86)GoogleChromeApplication,然后你的代码按预期执行。

我认为这有点奇怪,只是因为我可以cd C:Program Files (x86)GoogleChromeApplication并执行"chrome.exe"并且它可以工作。 所以这里似乎存在不一致的地方。 在 Windows 的命令提示符下,当我在一个目录(我认为是工作目录(时,我可以在那里执行可执行文件,而无需将这些可执行文件放在 Path env 变量中。 但是在使用时并非如此 Runtime.exec(String command, String[] envp, File dir) .

最新更新