【问题标题】:i cannot change two progressBar immediately我无法立即更改两个进度条
【发布时间】:2013-11-05 09:43:12
【问题描述】:

我想立即更改两个progressBar。但我不能。

我的意思是..

nextButton.addMouseListener(new java.awt.event.MouseAdapter() {     
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        WorkProgressBar.setVisible(true);
        FileProgressBar.setVisible(false);

        AND SO ON(about 2 secs.)

        WorkProgressBar.setVisible(false);
        FileProgressBar.setVisible(true);
    }
}

该代码大约需要 2 秒或更长时间。

但我能看到的只是 ProgressBar 的一闪。

所以我搜索了很多信息。

我用过线程、swingworker、swingutilities(invokelater)

但我无法解决。

我该如何解决这个问题。请帮帮我。

【问题讨论】:

  • 'AND SO ON(about 2 secs.)' 阻止处理发送到代表 ProgressBar 的窗口的消息。它们仅在事件处理程序退出时才获得进程,因此可见属性最终会被短暂切换,并且栏只会闪烁。

标签: java multithreading swingworker invokelater swingutilities


【解决方案1】:

您可能希望将在这 2 秒内完成的任务分配给工作线程。假设您想要 A.) 减少一个进度条和 B.) 增加另一个进度条。

您可以通过实现其 run 方法来分配一个线程来执行 A.)。然后另一个线程将在 B 上完成工作。)

与此同时,您希望您的主线程(这是分配这两个线程开始工作的原因)等到您的工作线程完成。因此,在完成thread1.start()thread2.start() 之后,您将通过执行连接来等待他们完成,如下所示:

try {
    thread1.join();
    thread2.join();
} catch (Exception e) { e.printStackTrace() }

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多