首页 > 解决方案 > 在 ActionListener 的 actionPerformed() 方法中暂停执行代码

问题描述

我有这种actionPerformed抽两张牌的方法。在这两张牌之间我想暂停程序一段时间,这样我就可以一张一张地看到牌。我尝试Thread.sleep()了方法,但它只是在方法执行后暂停程序actionPerformed

标签: javaswingevent-handling

解决方案


因为 Swing 事件线程中长时间运行的操作(如暂停)会冻结 UI,所以不推荐使用此策略。相反,可以考虑使用计时器来触发与第二张卡的绘制相对应的第二个事件,如下例所示。

public static void main(String[] args) {
    SwingUtilities.invokeLater(()-> {
        JFrame frame = new JFrame();
        JButton button = new JButton("Ok");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("First card");
                Timer timer = new Timer(2000, new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("Second card");
                    }
                });
                timer.setRepeats(false);
                timer.start();
            }
        });
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    });
}

推荐阅读