【问题标题】:java jprogressbar hangs during heavy operationjava jprogressbar 在繁重操作期间挂起
【发布时间】:2010-09-06 15:54:55
【问题描述】:

我正在编写一个 java 程序,在调用一个大量使用 CPU 的方法之前,我会显示一个带有 JProgressBar 的框架。虽然我在调用方法之前显示它,但直到方法结束时才显示 JProgressBar。进度条不以任何方式与方法交互(还),这就是我感到困惑的原因。是这样的:

progressbarframe.setVisible(true); // it is a indeterminate progress bar
heavyLoadMethod();
progressbarframe.dispose();

框架显示,但进度条在方法期间未初始化。有什么方法可以在不使用线程的情况下解决这个问题?最简单的方法是什么?

感谢您的宝贵时间

【问题讨论】:

    标签: java multithreading progress-bar jprogressbar


    【解决方案1】:

    您应该在单独的线程中调用heavyLoadMethod。你可以使用 java.util.concurrent.Executor 来代替它:

    Executor executor = java.util.concurrent.Executors.newSingleThreadExecutor();
    executor.submit(new Runnable() { public void run() { heavyLoadMethod();}});
    

    现在该方法将在单独的线程中调用,并且进度条将正确显示。

    【讨论】:

    • 它就像一个魅力,我从不使用线程而不使用整个类并使用“实现可运行”的东西。谢谢你的想法
    • 您应该探索java.util.concurrent 包。它有许多高级并发实用程序。
    【解决方案2】:

    您正在阻止 EDT 重新绘制 GUI。

    请阅读 Concurrency in Swing 上的 Swing 教程中的部分,以获得对该问题的完整解释。

    另外,请阅读“如何使用进度条”部分以获取工作示例。

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 2011-03-17
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多