我有一个JButton,当我单击该按钮时要在其中显示一个图标,然后在3秒钟后隐藏该图标并在该按钮中显示文本。

在动作监听器中,我尝试了以下代码:

JButton clickedButton = (JButton) e.getSource();
clickedButton.setIcon(new ImageIcon(images.get(clickedButton.getName())));
try {
    Thread.sleep(3000);
} catch(InterruptedException ex) {
    Thread.currentThread().interrupt();
}
clickedButton.setText("x");
clickedButton.setIcon(null);


问题是,当我单击按钮时,程序将阻塞3分钟,然后在按钮中显示文本“ x”。

我怎么解决这个问题 ?

最佳答案

不要在Swing事件线程上调用Thread.sleep(...),因为这会冻结线程及其GUI。而是使用Swing Timer。例如:

final JButton clickedButton = (JButton) e.getSource();
clickedButton.setIcon(new ImageIcon(images.get(clickedButton.getName())));

new Timer(3000, new ActionListener(){
  public void actionPerformed(ActionEvent evt) {
    clickedButton.setText("x");
    clickedButton.setIcon(null);
    ((Timer) evt.getSource()).stop();
  }
}).start();

10-06 05:39