【发布时间】:2015-02-14 23:20:56
【问题描述】:
我正在做一个个人项目。理想情况下,我的程序应该将 jlabels 图标设置为某个 gif,等待 gif 结束,然后将其设置为空白 png。每次单击另一个标签时,我的程序都应该执行此操作(我使用事件侦听器使标签用作按钮,按钮很难看)。不幸的是,按下“按钮”后,gif 立即被空白 png 替换,因为没有延迟或等待。
public void battle() {
ImageIcon active = new ImageIcon(getClass().getClassLoader().getResource("resource/attacks/Animation-attackbasic_DEFAULT.gif"));
ImageIcon blank = new ImageIcon(getClass().getClassLoader().getResource("resource/attacks/Animation-blank_DEFAULT.png"));
playerAttackDisplay.setIcon(active); //This sets the Jlabel icon to the gif
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(aqGUI.class.getName()).log(Level.SEVERE, null, ex);}
playerAttackDisplay.setIcon(blank);
}
我很想将一些代码放入带有 int seconds 参数的方法中,然后在需要延迟时调用它。最简单的方法是什么?
编辑
所以我使用了充满鳗鱼的气垫船这样的方法
public void delay(int time) {
final ImageIcon blank = new ImageIcon(getClass().getClassLoader().getResource("resource/attacks/Animation-blank_DEFAULT.png"));
new Timer(time, new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{playerAttackDisplay.setIcon(blank);}
}).start();}
public void battle() {
final ImageIcon I = new ImageIcon(getClass().getClassLoader().getResource("resource/attacks/Animation-attackbasic_DEFAULT.gif"));
playerAttackDisplay.setIcon(I);
delay(500);
}
每次用户在 GUI 中按下按钮时都会执行“battle()”方法。按下大约两次后,设置的gif和设置的png之间的延迟越来越小。这会导致 gif 动画在完成之前被切断。大约按四五次后,gif 似乎立即被切断了。
我玩过各种延迟时间,但没有一个能始终如一地播放 gif 直到完成。有没有办法获得一致的延迟?出于我的目的,gif 必须始终在每次按下按钮时播放完成。我该怎么做?
【问题讨论】: