私はすべての起動試行の約50%で始まる以下のJavaプログラムを持っています。残りの時間は、GUIを表示せずにバックグラウンドでデッドロックするように縫う。問題をJTextAreaオブジェクトのsetTextメソッドに追跡しました。 JButtonのような別のクラスを使用すると、setTextではなくJTextAreaデッドロックが機能します。これが起こって、どのような次のコードに問題があるさ、なぜ誰も私に説明することができます:SwingのJTextAreaでsetTextを使用するとデッドロックが発生する
public class TestDeadlock extends JPanel {
private JTextArea text;
TestDeadlock(){
text = new JTextArea("Test");
add(text);
updateGui();
}
public static void main(String[] args){
JFrame window = new JFrame();
window.setTitle("Deadlock");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new TestDeadlock());
window.pack();
window.setVisible(true);
}
public synchronized void updateGui(){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
System.out.println("Here");
text.setText("Works");
System.out.println("Not Here");
}
});
}
}あなたの主な方法はinvokeLater
またはinvokeAndWait
にラップする必要があります
'invokeLater'を使用しないでください。このような振る舞いは、まだウィンドウを作成していないため、おそらくディスパッチスレッドが存在しないためです。あなたがそれを見せたときに作成されます。 –
コメントをいただきありがとうございました。現在、この行動は私には意味があります – Christian