저는 초보자입니다. 불행히도이 문제에 봉착했습니다.자바 : 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를 사용하면 Swing 단일'Thread' 규칙을 위반하게됩니다 - EDT 외부에서 UI 구성 요소를 생성하거나 수정해서는 안됩니다. '; 이것은 당신이'initComponents()에 누락 된 코드에서 거짓말을 수도'java.swing.Timer' – MadProgrammer
이에 대한 대답의 많은 사용을 권장하고있다 방법입니다. 앞에서 언급 한 것처럼 '더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)'를 게시하십시오. –