【问题标题】:Change label text before file read happens在文件读取发生之前更改标签文本
【发布时间】:2011-09-22 20:31:01
【问题描述】:

我有一段时间没有使用 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");

我希望标签显示“正在加载...”,因为正在执行大文件读取,但标签永远不会冻结(因为正在运行作业)。如何在读取期间强制更改标签?我需要使用单独的类/线程吗?提前感谢您的帮助。

【问题讨论】:

    标签: java swing concurrency


    【解决方案1】:

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

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

    看看SwingUtilities invokeLater:

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

    您可以通过上面显示的方式创建线程。

    【讨论】:

      【解决方案2】:

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

      编码愉快。

      【讨论】:

        【解决方案3】:

        为长时间运行的任务使用 SwingWorker。然后你可以在标签需要更新时发布文本。

        阅读Concurrency in Swing 了解更多背景信息。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多