java设置延迟以更改imageicon

java设置延迟以更改imageicon,java,swing,delay,mouselistener,thread-sleep,Java,Swing,Delay,Mouselistener,Thread Sleep,我试图设置一个延迟,当按下一个按钮,将一个图像图标设置为某个图像,然后设置另一个延迟,以便设置另一个图像,所有这些都是通过单击来实现的。 换句话说: 单击一个按钮->设置图像->延迟->设置另一个图像 我在代码中得到的是最后一个状态“设置另一个图像” 另外,我不想使用计时器,我想使用延迟 这里是我的代码中我关心的部分 btnNewButton.addMouseListener(new MouseAdapter() { @Override public void mouseClic

我试图设置一个延迟,当按下一个按钮,将一个图像图标设置为某个图像,然后设置另一个延迟,以便设置另一个图像,所有这些都是通过单击来实现的。 换句话说:

单击一个按钮->设置图像->延迟->设置另一个图像

我在代码中得到的是最后一个状态“设置另一个图像”

另外,我不想使用计时器,我想使用延迟

这里是我的代码中我关心的部分

btnNewButton.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
    lblNewLabel.setIcon(and);   
sleeep(500);
        lblNewLabel.setIcon(app);
    }
});
这是延迟函数

 void sleeep(int n)
{
    try {
        Thread.sleep(n);
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }
}

您应该尝试使用InvokeLater执行在事件分派线程中设置映像的代码

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        lblNewLabel.setIcon(and);
    }
});

sleeep();

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        lblNewLabel.setIcon(and);
    }
});
  • 不要添加到,也不要为
    mouseClicked()
    添加,顺便说一句,所有
    Mouse
    Key
    事件都在中正确执行

  • 不要使用
    Thread.sleep(n)您遇到问题,请改用


  • 重复:@tokhi我没有提到我不想使用计时器。它不会可靠工作,只要你不在另一个线程上执行
    睡眠
    ,然后安排
    invokeLater
    设置最后一个图标。添加action listener会得到相同的结果,加上我提到我不想使用计时器。然后结果永远不会稳定。我打算在图像更改时冻结整个程序,这就是为什么我不想使用计时器的原因……我知道我可以在计时器工作时将对象设置为不可拾取,但使用延迟会容易得多。