【发布时间】:2016-01-21 03:17:20
【问题描述】:
我正在调查 setText 的死锁问题,但我需要先了解和了解死锁。为此,我创建了一个简短的程序来尝试复制可能在更大范围内发生的事情,但我不确定为什么我的小程序永远不会死锁。
这是我的学习计划:
public static void main(String[] a)
{
JFrame frame = new JFrame();
final JTextField p = new JTextField("start");
JButton btn = new JButton("button");
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
p.setText(String.valueOf(System.nanoTime()));
}
});
}
});
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(p);
frame.getContentPane().add(btn);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
我认为对 swing 的修改不能在单独的线程中完成,所以我有一个 setText 来更改 invokeLater 中的按钮单击时的 JTextField。这样做应该会破坏单线程规则,这样不会导致死锁吗?
【问题讨论】: