我有一个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();