【问题标题】:Swing application slow after restart with ProcessBuilder使用 ProcessBuilder 重新启动后摆动应用程序变慢
【发布时间】:2014-10-13 09:38:29
【问题描述】:

我有一个需要自动重启的 Java Swing 应用程序。我是这样实现的:

final String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
        final File currentJar = new File(UltraCoinApp.class.getProtectionDomain().getCodeSource().getLocation().toURI());

        /* is it a jar file? */
        if(currentJar.getName().endsWith(".jar")) {
        /* Build command: java -jar application.jar */
            final ArrayList<String> command = new ArrayList<String>();
            command.add(javaBin);
            command.add("-jar");
            command.add(currentJar.getPath());

            final ProcessBuilder builder = new ProcessBuilder(command);

            builder.start();
        }
        System.exit(0);

重启后GUI很慢,所有元素响应都很慢。我怀疑这可能是因为日志输出。

【问题讨论】:

  • 我会验证第一个实例确实已经死亡

标签: java swing processbuilder


【解决方案1】:

ProcessBuilder 的一个重要规则是您绝对必须读取子进程的输出,否则它最终会挂起。

这意味着您要么必须在启动进程时redirect stdout,要么必须在父进程的循环中读取输出。

另一种解决方案是让外部进程(脚本或可执行文件)循环运行您的 JAR。要终止,请调用System.exit(1) 并检查重启过程中的退出代码。

如果这一切都没有帮助,那么您将不得不使用分析器来找出应用程序实际花费的时间。

【讨论】:

  • 成功重定向到ProcessBuilder.Redirect.INHERIT
猜你喜欢
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
相关资源
最近更新 更多