我的程序要求我运行一个将编译java源代码的.bat文件。这运行正常,但我正在寻找一个解决方案,它将获得compile.bat的输出(和可能的错误)并将其添加到GUI上的文本窗格。我有以下代码,但是在执行时,该过程不会在窗格中打印任何内容而且没有任何错误。
GenerationDebugWindow.main(null);
Process process = rut.exec(new String[] {file.getAbsolutePath() + "\\compile.bat"});
Scanner input = new Scanner(process.getInputStream());
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
String line;
int exit = -1;
while ((line = reader.readLine()) != null) {
// Outputs your process execution
try {
exit = process.exitValue();
GenerationDebugWindow.writeToPane(line);
System.out.println(line);
if (exit == 0) {
GenerationDebugWindow.writeToPane("Compilation Finished!");
if(new File(file + "/mod_" + WindowMain.modName.getText()).exists()){
GenerationDebugWindow.writeToPane("Compilation May Have Experienced Errors.");
}
}
} catch (IllegalThreadStateException t) {
}
}
GenerationDebugWindow
private static JTextPane outputPane;
public static void writeToPane(String i){
outputPane.setText(outputPane.getText() + i + "\r\n");
}
答案 0 :(得分:2)
使用:
Runtime.getRuntime().exec( "cmd.exe /C " + file.getAbsolutePath() + "\\compile.bat" );
答案 1 :(得分:1)
参考此问题:Java Process with Input/Output Stream
进程的输出很可能是错误流。但是,ProcessBuilder是一个比直接使用System.getRuntime()更有用的类.exec()
在下面的示例中,我们告诉ProcessBuilder将错误流重定向到与输出相同的流,这简化了代码。
ProcessBuilder builder = new ProcessBuilder("cmd.exe /C " + file.getAbsolutePath() + "\\compile.bat");
builder.redirectErrorStream(true);
builder.directory(executionDirectory); // if you want to run from a specific directory
Process process = builder.start();
Reader reader = ...;
String line = null;
while ((line = reader.readLine ()) != null) {
System.out.println ("Stdout: " + line);
}
int exitValue = process.exitValue();
答案 2 :(得分:0)
我的程序要求我运行一个将编译java源代码的.bat文件。
* nix和OS X上的用户要求使用JavaCompiler
编译源代码。
STBC是使用JavaCompiler
的示例。它是open source。它使用JTextArea
而不是JTextPane
来保存来源和错误,但应该很容易适应。