0

我正在尝试使用 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 资源管理器运行批处理文件时,批处理文件可以工作、编译文件并在完成后关闭。

4

3 回答 3

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);
于 2012-06-10T17:07:39.137 回答
1

使用 . 检查子进程的返回值exitValue()getErrorStream()如果存在值非零,则还要读取错误流。

于 2012-06-10T17:06:07.933 回答
0

请注意,当使用Runtime.exec调用时,正在执行的命令的工作目录将是 java 进程的当前工作目录。您的批处理文件是否需要在特定目录中运行?

如果您需要为子进程设置特定的工作目录,则需要使用另一个版本的Runtime.exec

于 2012-06-10T17:03:23.443 回答