Java 我想立即更改按钮的图标

Java 我想立即更改按钮的图标,java,swing,dispatcher,event-dispatch-thread,thread-sleep,Java,Swing,Dispatcher,Event Dispatch Thread,Thread Sleep,我正在做一个简单的应用程序,有一个问题 我想从代码中立即更改按钮的图标,但它在方法结束后工作 这是我的密码 public void actionPerformed(ActionEvent e) { .. *some code* .. Buttons[Id].setIcon(images.get(Id)); Thread.currentThread().sleep(2000); .. *Some code* .. } 我点击按钮,它调用这个ActionListener方法acti

我正在做一个简单的应用程序,有一个问题

我想从代码中立即更改按钮的图标,但它在方法结束后工作

这是我的密码

public void actionPerformed(ActionEvent e) {

..
*some code*
..

Buttons[Id].setIcon(images.get(Id));

Thread.currentThread().sleep(2000);


..
  *Some code*
..
 }
我点击按钮,它调用这个
ActionListener
方法
actionPerformed

按钮[Id].setIcon(images.get(Id))应更改图标,但在

Thread.currentThread().sleep(2000);
我怎样才能使它立即起作用

是调度员还是什么


谢谢

< p>使用<代码> javax .wing。您正在阻止EDT设置图标

Buttons[Id].setIcon(images.get(Id));
Timer timer = new Timer(2000, new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        // do something
    }
});
timer.setRepeats(false);
timer.start();

请参阅

上的详细信息,您为什么需要睡眠部分?可能需要在睡眠之前重新绘制()?不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。不要调用
Thread.sleep(n)
为重复任务执行Swing
计时器,或为长时间运行的任务执行
SwingWorker
。有关更多详细信息,请参阅。