私は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() を使用して問題を解決しようとしましたが、まだ機能しません。ご協力いただきありがとうございます。