Swing应用程序

时间:2016-07-19 10:58:08

标签: java swing processbuilder runtime.exec

我有一个swing应用程序,我正在执行一个jar文件,它将在内部进行一些处理。我的流程如下: 1.一个带有main()的java文件,它加载swing GUI。从该GUI我可以浏览并加载所需的jar文件来执行。

public static void main(String[] args)
{
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            MigrationProcessElementDialog.createAndShowGUI();

        }
    });

}
  1. 从swing应用程序我将jar文件加载为:
  2. Runtime rt = Runtime.getRuntime();   
    // replacePath is the path of the jar file to be loaded.
    Process proc = rt.exec("java -jar " + replacePath);   
    int exitVal = proc.waitFor();
    
    1. 当我触发执行时,从我看到的任务管理器,两个javaw.exe(一个用于eclipse,一个用于SWING GUI)和一个java.exe用于程序流。 但是程序流程会持续几次(从日志更新中显而易见)但在一段时间后会停滞不前。

    2. 一旦我杀了我的swing GUI javaw.exe;程序流程启动并立即继续执行其余部分。所以在我看来,某种程度上javaw.exe阻止了java.exe的执行。它可能吗?它的解决方案是什么?

    3. 如果我执行,我的进程可执行jar从命令提示符使用普通的java -jar" path"命令,程序流程没有停滞,它按预期工作。

      仅在从GUI执行或使用运行时执行时遇到问题。我也使用过ProcessBuilder;但面临同样的问题。

      如果有人可以给我任何线索,那将是非常有帮助的。谢谢!

1 个答案:

答案 0 :(得分:1)

您应该处理进程的输出(stdout,stderr)。因为,这些输出将通过三个流(getOutputStream(),getInputStream(),getErrorStream())重定向到父进程。如果不处理,它将在子进程产生输出时阻塞。

Process documentation

  

某些本机平台仅提供   标准输入和输出流的缓冲区大小有限,失败   及时写入输入流或读取输出流   子进程可能导致子进程阻塞,甚至死锁。