如何在java中运行.exe文件
如何在java中运行.exe文件
我知道这个问题以前已经被问过了,但是那些答案似乎对我都不适用。我正在尝试在一个Java程序中运行一个.exe文件。下面这段代码(我从互联网上找到的)是可行的;记事本会打开。
import java.io.IOException; public class start { public static void main(String args[]) { try { Process p = Runtime.getRuntime().exec(new String[] {"C:\\Windows\\System32\\notepad.exe"}); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
但是当我把文件夹更改为包含我自己的.exe文件的文件夹时,它就不起作用了。它甚至不报错。它只是启动然后终止。如果我在文件夹本身中双击该文件,它会打开并运行,所以文件本身是正常的。
所以,为了明确起见,我把Process p
更改为
Process p = Runtime.getRuntime().exec(new String[] {"C:\\Users\\Sharonneke\\Documents\\IntraFace-v1.2\\x64\\Release\\IntraFaceTracker.exe"});
为什么这样不起作用,我该如何解决?
更新:
所以我不需要使用new String[]
,但这并不能解决问题。另外,使用ProcessBuilder(就像kage0x3b在回答部分中说的那样)会出现错误:"The constructor ProcessBuilder(String) is undefined"
,尽管它应该可以这样工作 🙁
问题的原因是程序的工作目录可能有问题,如果程序试图从工作目录加载文件,则在Java代码中执行时可能无法正常工作,除非进行设置。解决方法是使用ProcessBuilder,并设置工作目录。代码如下:
File file = new File("C:\\Users\\Sharonneke\\Documents\\IntraFace-v1.2\\x64\\Release\\IntraFaceTracker.exe"); ProcessBuilder processBuilder = new ProcessBuilder(file.getAbsolutePath()); processBuilder.directory(file.getParentFile()); try { processBuilder.start(); } catch(IOException ex) { ex.printStackTrace(); }
问题的解决方法参考了stackoverflow上的一个相关问题。还可能出现"The constructor ProcessBuilder(String) is undefined"的错误,可能是因为使用了错误的ProcessBuilder类。正确的ProcessBuilder类应该是java.lang.ProcessBuilder。重新启动计算机有时可以解决这个问题。
问题的原因是之前的解决方法都没有起作用,但是通过使用Runtime.getRuntime().exec()
方法来运行.exe
文件可以成功运行。原因可能是之前的方法存在某种问题,但是使用Runtime.getRuntime().exec()
方法可以绕过这些问题。
解决方法是使用Runtime.getRuntime().exec()
方法来运行.exe
文件,并传入正确的文件路径作为参数。在这种情况下,还需要传入一个新的文件作为工作目录参数。
以下是一个示例代码,展示了如何使用Runtime.getRuntime().exec()
方法来运行.exe
文件:
Runtime.getRuntime().exec("C:\\Users\\Sharonneke\\Documents\\IntraFace-v1.2\\x64\\Release\\IntraFaceTracker.exe", null, new File("C:\\Users\\Sharonneke\\Documents\\IntraFace-v1.2\\x64\\Release\\"));
通过使用这种方法,.exe
文件应该能够成功运行。
另外,有其他用户提到虽然这种方法可以解决问题,但有时候.exe
文件仍然无法通过Java代码启动。
如何在Java中运行.exe文件
问题的出现原因:
- 在尝试使用ProcessBuilder运行.exe文件时,出现了错误提示"The constructor ProcessBuilder(String) is undefined",这可能是因为使用了错误的ProcessBuilder类。
解决方法:
1. 使用Runtime.getRuntime().exec()方法运行.exe文件:
Process p = Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe");
2. 使用ProcessBuilder运行.exe文件:
ProcessBuilder p = new ProcessBuilder("C:\\Windows\\System32\\notepad.exe"); p.start();
注意事项:
- 确保传入的文件路径是有效的,可以通过双击或在命令提示符中运行来验证。
- 如果出现错误提示"The constructor ProcessBuilder(String) is undefined",请检查是否导入了正确的ProcessBuilder类(java.lang.ProcessBuilder.ProcessBuilder)。