Я новичок в java и, к сожалению, я застрял в этой проблеме. В коде:Java: setText() и темы
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(), но все равно не работает. Спасибо за помощь.
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –
Использование 'java.util.TimerTask' в этом случае будет нарушать одно правило' Thread' Swing - вы никогда не должны создавать или изменять компонент UI за пределами EDT. Таким образом, вам рекомендуется использовать 'java.swing.Timer' – MadProgrammer
. Большая часть ответа на этот вопрос может заключаться в недостающем коде в' initComponents(); '. Как я уже упоминал ранее, «для лучшей помощи, скорее, опубликуйте [SSCCE] (http://sscce.org/)». –