我知道这似乎是一个反复提出和回答的问题,但即使在梳理堆栈溢出几个小时后我也无法解决问题。如果我遗漏了一些明显的东西,请提前抱歉。
我需要在每次线程启动时更改 jLable 的文本,并在该线程结束时再次更改。简而言之,我试图显示当前正在运行的线程数。
jobQueueView
是一个静态且最终的 jLabel。 Main
是具有 jLabel 的 jFrame。 jobQueue
是一个静态 int。
在每个线程的开始处:
jobQueue += 1; refreshQueue();
在每个线程的末尾:
jobQueue -= 1;refreshQueue();
最后
public void refreshQueue() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Main().jobQueueView.setText(Integer.toString(jobQueue));
}
});
}
这行不通。有任何想法吗?谢谢
编辑:按照安德鲁·汤普森的指示 Swing JLabel text change on the running application :在按钮单击事件上
Can I change the text of a label from a Thread in Java? : 必须使字符串成为最终字符串。我不能。
Update JLabel from another thread :使用计时器,我需要线程数
JLabel on JPanel doesn't update when setText from another method : 尝试了给定的解决方案。没有成功
Thread and JLabel in Swing- Not working properly :更多的按钮点击,但不同的解决方案。还是没用
最佳答案
看来您每次都在创建一个新框架。
new Main().jobQueueView.setText(Integer.toString(jobQueueCount ));
所以你有多个框架但有一个静态标签。这可能会导致问题。通过如下静态方式访问 jobQueueView。
Main.jobQueueView.setText(Integer.toString(jobQueueCount ));
关于java - 如何在没有最终字符串的情况下通过不同线程更改 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38306209/