我正在尝试使用java在绝对位置运行批处理文件。批处理文件将编译几个java文件。
以下是我一直在尝试的代码:
String s=file.getAbsolutePath() + "\\compile.bat";
Runtime rut = Runtime.getRuntime();
try {
rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"});
}catch(IOException e1) {
e1.printStackTrace();
}
System.out.println(s);
现在,当执行此代码时,我没有控制台错误,但批处理文件未运行。但是,当我通过Windows资源管理器运行批处理文件时,批处理文件可以正常工作,编译文件并在完成后关闭。
答案 0 :(得分:2)
你怎么知道没有控制台错误?
试试这个:
String s=file.getAbsolutePath() + "\\compile.bat";
Runtime rut = Runtime.getRuntime();
try {
Process process = rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"});
// prints out any message that are usually displayed in the console
Scanner scanner = new Scanner(process.getInputStream());
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
}catch(IOException e1) {
e1.printStackTrace();
}
System.out.println(s);
答案 1 :(得分:1)
使用exitValue()
检查子流程的返回值。
如果存在的值不为零,也请读取错误流getErrorStream()
。
答案 2 :(得分:0)
请注意,在使用Runtime.exec调用时,正在执行的命令的工作目录将是java进程的当前工作目录。您的批处理文件是否需要在特定目录中运行?
如果您需要为子流程设置特定的工作目录,则需要使用其他版本的Runtime.exec。