java - 在 ActionListener 的 actionPerformed() 方法中暂停执行代码
问题描述
我有这种actionPerformed
抽两张牌的方法。在这两张牌之间我想暂停程序一段时间,这样我就可以一张一张地看到牌。我尝试Thread.sleep()
了方法,但它只是在方法执行后暂停程序actionPerformed
。
解决方案
因为 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);
});
}
推荐阅读
- python-3.x - 编码问题,在哪里放置“忽略”?
- windows - 是否可以在无头 Windows 容器中运行 GUI 应用程序?
- spring - 构建错误:BUG!源集中阶段“指令选择”中的异常
- c# - 如何计算 WinForms TrackBar 的每个刻度位置?
- excel - Selenium、Chrome、Excel VBA 内存不足
- c# - 通过 group by 获取 LEFT JOINED 实体的计数
- django - 身份验证类不可见的 django-rest-swagger 2.2.0 端点
- r - 优雅地改变多个列
- python-3.x - 在 python 3.7 中确认 ssl 模块,ssl 模块不可用
- php - 调用 memeber 函数.. 在字符串上,我如何克服这个错误