我已经制作了一个 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
}
- 上述方法正确吗?
- 这 10 个线程应该是 SwingWorker 的子类吗?
- 还有其他方法可以做到这一点吗?
最佳答案
也许更简单的方法是将更新 GUI 的代码包装在 SwingUtilities.invokeLater(...) 方法中。
编辑:每当您想要更新标签时,请在您的个人线程中执行以下操作:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
label.setText(...);
}
});
关于java - javax.swing.SwingWorker 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624999/