gpt4 book ai didi

java - 从 main() 中启动应用程序。一起指定路径和文件名还是单独指定?

转载 作者:太空宇宙 更新时间:2023-11-04 10:45:12 25 4
gpt4 key购买 nike

据我了解,try block 中的前两条语句应该具有相同的效果;启动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)\Google\Chrome\Application"): 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\\"));

你会发现这有效。这是因为“notepad.exe”所在的目录位于您的 Windows Path 环境变量中。

问题在于,使用 Runtime.exec(String command, String[] envp, File dir) 方法执行时,仍然需要在 Path 环境变量中执行可执行文件。因此,我继续将 C:\Program Files (x86)\Google\Chrome\Application 添加到我的路径中,然后您的代码按预期执行。

我认为这有点奇怪,只是因为我可以 cdC:\Program Files (x86)\Google\Chrome\Application 并执行“chrome.exe”并且它可以工作。所以这里似乎存在矛盾。在 Windows 的命令提示符中,当我位于某个目录(我认为是工作目录)时,我可以执行其中的可执行文件,而无需在 Path 环境变量中包含这些可执行文件。但使用 Runtime.exec(String command, String[] envp, File dir) 时情况并非如此。

关于java - 从 main() 中启动应用程序。一起指定路径和文件名还是单独指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48486492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com