Java:setText() 和线程

标签 java multithreading swing jlabel settext

我是java初学者,不幸的是我被这个问题困扰了。在代码中:

NewJFrame.java:

public class NewJFrame extends JFrame {

    public void showText() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                jLabel1.setText("in show()"); //it does not work
                System.out.println("in show()"); //it works
            }
        });
    }

    public NewJFrame() {
        initComponents();
        jLabel1.setText("start"); //it works
    }

    public static void main(String args[]) {
        Timer timer = new Timer();
        timer.schedule(new NewClass(), 1000, 2000);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    private javax.swing.JLabel jLabel1;
}

NewClass.java:

package newpackage;

import java.util.TimerTask;

class NewClass extends TimerTask {

    public void run() {
        System.out.println("in NewClass.run()"); //it works
        new NewJFrame().showText();
    }
}

我遇到一个问题,即从计时器线程调用 setText 时未设置 jLabel1。我尝试使用invokeLater()解决该问题,但仍然不起作用。 感谢您的帮助。

最佳答案

JLabel 永远不会添加到任何容器中。为什么会出现呢?

作为一般建议,不要扩展框架,只需保留引用即可,正如 @Reimeus 所提到的,使用 Swing Timer

关于Java:setText() 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927022/

相关文章:

java - 我如何在 Java 中返回 boolean 值?

java - 如何在 Java 中相对于单个线程同步一组多个线程

c - 在多线程环境中捕获信号

java - java中图形不绘制图像

java - 如何允许一个类中的按钮设置其他类中其他面板的可见性?

java - 尝试读取时找不到文件

java - Lucene 4.0 中的词频

c# - 如何处理 SystemEvents.OnUserPreferenceChanged 中的 C# 挂起

java - 由于资源限制,JVM 是否有能力终止线程?

java - 按名称获取组件不支持所有操作?