我有一段时间没有使用java,我试图在一个主要类中做这样的事情:
// do stuff
this.label.setText("Status: IDLE");
// do things
this.label.setText("Status: LOADING..."); // set to loading right before file read
// read and parse huge file
this.label.setText("Status: DONE");
我希望标签显示'loading ...',因为正在执行大文件读取,但标签永远不会冻结(正在运行作业)。如何在阅读期间强制标签更改?我需要使用单独的类/线程吗?在此先感谢您的帮助。
答案 0 :(得分:3)
如何在阅读期间强制标签更改?我需要使用吗? 单独的类/线程?
是的,你是对的。标签和改变它的值的类应该在不同的线程中。
Runnable newThread = new Runnable() {
public void run() {
}
};
您可以通过上面显示的方式创建一个帖子。
答案 1 :(得分:2)
在后台线程中执行文件IO。您可以使用SwingUtilities.invokeLater(...)
确保在EDT中设置标签文本。或者你可以使用SwingWorker
便利类来完成这一切。
快乐的编码。
答案 2 :(得分:2)
是。你需要一个单独的线程。请查看JProgressBar和一些examples:
答案 3 :(得分:2)
将SwingWorker用于长时间运行的任务。然后,您可以在需要更新标签时发布文本。
阅读Concurrency in Swing以获取更多背景信息。