我试图运行一个需要很长时间才能完成java程序的程序。 java程序中的程序输出一个巨大的文件(介于4到6 GB之间)。我在main方法中使用以下代码。
//get the runtime goinog
Runtime rt = Runtime.getRuntime();
//execute program
Process pr = rt.exec("theProgram.exe");
//wqit forprogram to finish
pr.waitFor();
我收到了一些错误:
更多信息:
答案 0 :(得分:1)
最好在Java代码的末尾包含pr.destroy()
,以便在程序结束时终止进程。这解决了错误#1
pr.exitValue()
在这些情况下会返回什么内容?
答案 1 :(得分:1)
当您的java程序退出时,使用Process pr
调用此方法将终止进程:
private void attachShutdownHook(final Process process) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
process.destroy();
}
});
}
如果您的流程有输出,您可以使用它来评估其进度,然后通过调用将输出重定向到java
private void redirectOutputStreamsToConsole(Process process) {
redirectStream(process.getInputStream(), System.out);
redirectStream(process.getErrorStream(), System.err);
}
private void redirectStream(final InputStream in, final PrintStream out) {
new Thread() {
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null)
out.println(line);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}.start();
}