在文件读取发生之前更改标签文本

时间:2011-09-22 20:31:02

标签: java swing concurrency

我有一段时间没有使用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 ...',因为正在执行大文件读取,但标签永远不会冻结(正在运行作业)。如何在阅读期间强制标签更改?我需要使用单独的类/线程吗?在此先感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

  

如何在阅读期间强制标签更改?我需要使用吗?   单独的类/线程?

是的,你是对的。标签和改变它的值的类应该在不同的线程中。

查看SwingUtilities invokeLater

Runnable newThread = new Runnable() {
     public void run() {
     }
 };

您可以通过上面显示的方式创建一个帖子。

答案 1 :(得分:2)

在后台线程中执行文件IO。您可以使用SwingUtilities.invokeLater(...)确保在EDT中设置标签文本。或者你可以使用SwingWorker便利类来完成这一切。

快乐的编码。

答案 2 :(得分:2)

是。你需要一个单独的线程。请查看JProgressBar和一些examples

答案 3 :(得分:2)

将SwingWorker用于长时间运行的任务。然后,您可以在需要更新标签时发布文本。

阅读Concurrency in Swing以获取更多背景信息。