gpt4 book ai didi

java - 如何使 for 循环在每圈之间等待 1 秒?

转载 作者:行者123 更新时间:2023-12-02 00:29:59 25 4
gpt4 key购买 nike

嗯,我正在尝试用 for 循环制作一个小动画,代码是下一个:

private class Listen4 implements ActionListener{
int i ;
for (i = 0; i<5 ; i++){
try{
if (i == 0){ imglabel.setIcon(new ImageIcon("1.png")); }
if (i == 1){ imglabel.setIcon(new ImageIcon("2.png")); }
if (i == 2){ imglabel.setIcon(new ImageIcon("1.png")); }
if (i == 3){ imglabel.setIcon(new ImageIcon("2.png")); }
if (i == 4){ imglabel.setIcon(new ImageIcon("1.png")); }
Thread.sleep(1000);
}
catch (InterruptedException e){}
}
}

问题是当我执行程序时,图像没有改变;这让我觉得线程可能不会每圈都停止。

编辑:谢谢大家!

最佳答案

您遇到的问题是您的代码在 GUI 线程上运行,该线程与 GUI 对话并将其呈现到屏幕上。您调用该方法来设置图标,但这实际上并没有重绘屏幕,它只是将内容排队,以便下次 GUI 线程获得空闲时间时重绘屏幕。但随后你让 GUI 线程 hibernate 一秒钟,在此期间它无法执行任何操作。在您的整个方法完成之前,它无法更新屏幕上的任何内容,此时您已经完成了所有图标更新和所有 sleep !

答案是使用 javax.swing.TimersetIcon() 调用排队,以便在固定时间间隔后发生。 Timer 将启动一个新线程在后台等待适当的时间,然后它将调用 GUI 线程上的 setIcon() 调用。这是唯一的方法:WAITING必须在后台进行,但 GUI 更新调用必须在 GUI 线程上进行。

试试这个:

int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
imglabel.setIcon(new ImageIcon("1.png"));
}
};
new Timer(delay, taskPerformer).start();

还要注意,由于 ActionListener 是一个内部类,因此它不能引用 imglabel,除非它是 final 字段(但是这应该不是问题:您始终可以将其设为最终)。

对于奖励分数,理想情况下,您最好不要从 1.png 创建三个不同的 ImageIcon 实例:您可以只创建一个,然后使用它三次。

关于java - 如何使 for 循环在每圈之间等待 1 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com