花时间通过java执行.bat文件?

时间:2011-03-04 10:44:56

标签: java

我编写了一个使用Java运行.dat文件的代码。但是当运行该应用程序时,执行需要时间意味着它会给出一半结果,然后在给出完整结果后一段时间后。

这是我的代码:

String file = config.getOutPath() + "run_doxygen.bat";
                BufferedWriter out = new BufferedWriter(
                        new FileWriter(file));

                String cmd = "doxygen " + config.getOutPath() + "Doxyfile";
                runtime.exec(cmd);
                System.out.println("cmd_doxy:"+cmd);
                out.write(cmd);
                out.newLine();
                out.close();

doxygen生成xml文件。假设它生成10 xml文件。当我启动* .bat文件时,它生成5个文件并生成休息5文件需要时间。 和* .bat文件包含:doxygen“path”

path是配置文件的位置。当我用cmd或双击运行它时它工作正常。

任何人都有任何想法 。 感谢

3 个答案:

答案 0 :(得分:0)

可能是你应该冲洗作家。

out.newLine();
out.flush();
out.close();

答案 1 :(得分:0)

你打算在程序中做什么并不完全清楚,但它实际上做的是:

  1. 打开“.bat”文件进行书写。
  2. 启动“doxygen”命令作为单独的外部进程。
  3. 它将命令写入标准输出,然后写入文件。
  4. 如果您说将输出写入文件需要一些时间,那么这并非完全出乎意料。操作系统可能决定为新启动的doxygen应用程序提供大量的CPU时间来启动。如果它没有阻塞,则Java应用程序可能无法获得几秒钟的时间片。之后,操作系统可以在两个应用程序之间切换,直到一个或另一个完成。

    但为什么这很重要?您的Java应用程序是否期望/要求doxygen在它之前完成?

    如果是这样,那么解决方案是做这样的事情:

    Process proc = runtime.exec(cmd);
    // do more stuff.
    int rc = proc.waitFor();
    // Whoopee!  the process has finished (or died) check the rc to see which.
    

答案 2 :(得分:0)

如果您没有使用外部命令生成的流,则可能导致程序挂起。请参阅this article,其中几乎涵盖了使用Runtime.exec的所有问题。