java - javax.swing.SwingWorker 中的问题

标签 java multithreading swingworker

我已经制作了一个 swings 应用程序,但有一个问题如下:

我已经从事件调度线程启动了一个名为“Thread-Main”的 SwingWorker 线程,并将 GUI 的 JLabel 引用传递给了“Thread-Main”。

现在我已经从“Thread-Main”启动了 10 个线程。

现在我希望所有 10 个线程都应该更新 JLabel。

我怎样才能做到这一点?

有人告诉我,我可以通过首先将 SwingWorker 的所有 10 个线程子类化,然后调用publish("") 方法并在该“publish”方法中传递字符串,然后通过“Thread-Main”中的以下方法

@Override
protected void process(List<String> labelStrings) {
    String count = labelStrings.get(labelStrings.size() - 1);
    label.setText(count); // label is a reference to a label in the GUI 
}
  1. 上述方法正确吗?
  2. 这 10 个线程应该是 SwingWorker 的子类吗?
  3. 还有其他方法可以做到这一点吗?

最佳答案

也许更简单的方法是将更新 GUI 的代码包装在 SwingUtilities.invokeLater(...) 方法中。

编辑:每当您想要更新标签时,请在您的个人线程中执行以下操作:

SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        label.setText(...);
    }
});

关于java - javax.swing.SwingWorker 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624999/

相关文章:

java - 两个整数数组的成对乘法。如果它们的长度不同,则较短的需要缠绕

java - JAVA中的if语句报错

java - 关于TLS加密的查询

c++ - 不正确地终止线程?

c# - 如何在 Visual Studio 中调试单线程?

java - 如何加入现有的 SwingWorker

java - 无法调用 LogoutSuccessHandler - Spring Security

c++ - 将程序拆分为 4 个线程比单个线程慢

java - 从 SwingWorker 实时更新 GUI

java - 调用 SwingWorker 方法 get() 时 gui 卡住