单击图像时,我希望显示另一幅图像暂停一秒钟,然后恢复原始图像并再次显示再次显示当我尝试执行此操作时,操作处理程序(例如下面给出的代码)会在 sleep 后设置图像。我想暂停显示图像,然后再次显示原始图像,我该如何实现
private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
try { //sleep 1 seconds
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg")); }
最佳答案
- Swing 是单线程的,您永远不应该在事件调度线程的上下文中执行长时间运行或阻塞操作
- Swing 不是线程安全的,这意味着您永远不应该在 EDT 上下文之外更新 UI(以及 UI 需要的任何东西)
解决您的问题的最简单方法是使用 Swing Timer
private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg"));
}
});
timer.setRepeats(false);
timer.start();
}
参见 Concurrency in Swing和 How to use Swing Timers了解更多详情
关于java - 我是初学者,正在尝试在 netbeans 中制作纸牌翻转游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299182/