繁体   English   中英

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

[英]Running command line program inside java program

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

最好在Java代码的末尾包含pr.destroy() ,以便在程序结束时终止进程。 这解决了错误#1

在这些情况下, pr.exitValue()返回什么?

使用Process pr调用此方法将在java程序退出时终止该过程

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM