我是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/