Java 我是一个初学者,我正在尝试用netbeans制作一个纸牌翻转游戏
单击一个图像时,我希望显示另一个图像暂停一秒钟,并在尝试执行操作时再次播放原始图像。操作处理程序(如下面给出的代码)将在睡眠后设置图像。我希望显示图像暂停并再次显示原始图像如何实现那Java 我是一个初学者,我正在尝试用netbeans制作一个纸牌翻转游戏,java,swing,Java,Swing,单击一个图像时,我希望显示另一个图像暂停一秒钟,并在尝试执行操作时再次播放原始图像。操作处理程序(如下面给出的代码)将在睡眠后设置图像。我希望显示图像暂停并再次显示原始图像如何实现那 private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) { jButton16.setIcon(new javax.swing.Image
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")); }
永远不要在内部调用
Thread.sleep()
因为Thread.sleep()
将阻止事件调度线程,您的UI将被冻结,所以您可以使用
参考以下代码
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\O.png"));
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jButton16.setIcon(new javax.swing.ImageIcon("C:\\Users\\x\\Documents\\118px-AMIGO.jpg"));
}
});
timer.setRepeats(false);
timer.start();
- Swing是单线程的,您不应该在事件调度线程的上下文中执行长时间运行或阻塞操作
- Swing不是线程安全的,这意味着您永远不应该在EDT上下文之外更新UI(以及UI需要的任何内容)
计时器
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();
}
请参阅和了解更多详细信息首先查看问题的根本原因,然后查看可能的解决方案您还可以查看基本上实现了您试图实现的功能您也不应该从UI上下文之外更新或修改UI-Swing
计时器
将是一种更简单、更有效的方法更安全的解决方案