【问题标题】:The text of the Label not changing in Java标签的文本在 Java 中没有改变
【发布时间】:2012-11-08 06:57:34
【问题描述】:

我正在为我的项目创建一个 UI,其中涉及 JLabel (javax.swing),每次完成该任务时都需要更新(标签的)文本。

我使用 label.setText 更改/更新里面的文本(如下图所示)。但是,大多数时候,标签不会更改文本。我尝试使用 label.UpdateUI() 希望它能解决问题,但它没有。

taskLabel.setText(msg);

有什么想法吗?

if (gatherSamplesValue)
{
      if (SourceACheckBox)
      {
           try 
           { 
                Thread setLabelText1 = new Thread(){
                    public void run(){
                        taskLabel.setText(msg);

                    taskLabel.validate();
                }
             };
             msg = "Task : Gathering URLs from Phish Tank. DateTime: " + Main.getCurrentDate();
             setLabelText1.start();
             SourceA.sourceAMain();
             msg="Done with the task : " + Main.getCurrentDate();
             Thread setLabelText2 = new Thread(){
                public void run(){
                    taskLabel.setText(msg);
                    taskLabel.validate();
                }
             };
             setLabelText2.start();
      } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
      }
 }

 if (SourceBCheckBox)
 {
  .
  .
 }

 if (SourceCCheckBox)
 {
  .
  .
 }

}

这是代码,假设我需要在源 A 和 B 中放置相同的命令。里面的线程不起作用。

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 其余的代码语句很可能阻塞了 EDT。有关详细信息,请参阅Concurrency in Swing
  • 大部分时间 ...对我来说听起来像是线程问题。查阅安德鲁提到的链接
  • @Andrew 代码贴在上面。我尝试按照您所说的那样使用 Thread,但仍然无法正常工作。
  • 注意:'代码'!='SSCCE' 请(重新)阅读链接的文章。

标签: java swing concurrency jlabel event-dispatch-thread


【解决方案1】:

..每次完成该任务时都需要更新(标签的)文本。

  • Concurency in Swing 有问题

  • Swing GUI 的所有更新都必须在 EDT 上完成,即使 Whatever.setText() 被声明为线程安全,但默认情况下使用来自 Swing ListenerThread.sleep(int) 会冻结 Swing GUI,并且不会更新任何更改在屏幕上

  • hack 将被放入 taskLabel.setText(msg);invokeLater(),然后输出到 Swing GUI 应该在 EDT 上完成

  • 查看并使用SwingWorker 作为方法之一,其中方法processpublishdone 通知EDT

【讨论】:

    【解决方案2】:

    将文本添加到 JLabel 后,您应该像这样将其添加到面板中。 label.setText("某事"); panel.add(标签)

    【讨论】:

    • 推测(即 IMO 是)最好在此阶段发表评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多