在java程序中运行命令行程序

时间:2011-12-05 17:39:38

标签: java

我试图运行一个需要很长时间才能完成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();

我收到了一些错误:

  • 当java程序结束时,Program.exe有时不会停止
  • 即使theProgram.exe已经结束,java程序也永远不会结束
  • theProgram.exe在没有完成的情况下停止,并且java程序不会停止。

更多信息:

  • 我在Windows7中使用cygwin

2 个答案:

答案 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();
}