我知道之前有人问过,但这些答案似乎都不适合我。我试图在java程序中运行.exe文件。以下代码(我从Internet上获取)有效;记事本开始。
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"
,但显然应该像这样:(
答案 0 :(得分:2)
您不需要只运行一个应用程序的数组...
只是这样做:
Process p = Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe");
并添加相应的try catch
块
使用 processBuilder
ProcessBuilder p = new ProcessBuilder("C:\\Windows\\System32\\notepad.exe");
p.start();
答案 1 :(得分:2)
如果程序的工作目录试图从工作目录中加载文件,如果单击该文件显然有效,则可能存在问题但是如果你没有设置它,我认为不是从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();
}
答案 2 :(得分:1)
谢谢大家的帮助,但不幸的是,你的答案都没有。我设法找到了能够很好地运行我的代码的东西(根据我的主管的说法),所以我很开心。这就是我现在正在使用的:
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\\"));
出于某种原因,即使我不像之前那样使用它也不会这样,但我决定不再提问了。有用 :) 再次感谢您花时间尝试帮助我!