我有一个Java程序,在大约50%的启动尝试中可以启动。其余时间,它似乎在后台死锁而没有显示任何GUI。我追踪到问题是JTextArea对象的setText方法。使用像JButton这样的另一个类可使用setText,但JTextArea会死锁。有人能解释一下为什么会发生这种情况以及下面的代码有什么问题吗?
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
。这种行为可能是由于缺少分派线程,因为您还没有创建任何窗口。当您显示它时,就会创建一个窗口。 - michael nesterenko