新手请教关于线程的一个简单问题
在ATM操作界面那里有这样一个过程,在存款功能里,把钱放进去之后,ATM界面转为显示“正在验钞”字样,过几秒后,再显示“交易正在处理中”,最后再是“交易成功”,我想用两个方法实现这个过程,但是验钞的标签还没显示出来就开始睡眠了,而且直接就显示交易成功界面了,我实在想不出怎么解决,求高手指教。代码如下:
public void checkcash(){
jp.add(Checkmoney);//显示正在验钞标签
Checkmoney.setFont(new Font("",Font.CENTER_BASELINE, 22));
Checkmoney.setBounds(130, 120, 150, 50);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
jp.removeAll();
jp.repaint();
deal();
}
public void deal(){
JLabel jdeal = new JLabel();
jdeal.setIcon(new ImageIcon("d:\\用到的图片\\交易处理.jpg"));
jdeal.setSize(getWidth(), getHeight());
jp.add(jdeal);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
------解决方案--------------------大概是以下意思:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jp.add(Checkmoney);//显示正在验钞标签
Checkmoney.setFont(new Font("",Font.CENTER_BASELINE, 22));
Checkmoney.setBounds(130, 120, 150, 50);
}
});
具体去学习一下SwingUtilities.invokeLater是干什么用的
------解决方案--------------------
你应该自己新开一个线程来负责计时,invokelater应该也是在ui线程里的,具体不是很清楚这里,没有看过源码