新手请教关于线程的一个简单问题

ww-y 2013-09-26 09:13:49
在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();
}

}
...全文
354 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww-y 2013-10-01
  • 打赏
  • 举报
回复
谢谢大家~~问题已经解决了
逍遥jc 2013-09-30
  • 打赏
  • 举报
回复
做个进度条吧。不一定非要休眠多少时间才行。等进度条读完再休眠也可以的。
O_森_O 2013-09-28
  • 打赏
  • 举报
回复
引用 6 楼 u011995481 的回复:
[quote=引用 5 楼 wcs1989 的回复:] 你上面的程序的问题在于,你调用的sleep方法是在GUI线程里面,也就是负责界面刷新和显示的线程,你让这个线程sleep了,这个线程就没法工作了,而当线程睡醒后会分别将显示验钞过程和验钞结果的代码分别执行完,这个过程是非常快的,肉眼更本看不到,你看到的就是现实验钞结果的界面了
那我应该怎么用SwingUtilities.invokeLater(new Runnable() {....}这段呢??[/quote] 你应该自己新开一个线程来负责计时,invokelater应该也是在ui线程里的,具体不是很清楚这里,没有看过源码
ww-y 2013-09-28
  • 打赏
  • 举报
回复
引用 5 楼 wcs1989 的回复:
你上面的程序的问题在于,你调用的sleep方法是在GUI线程里面,也就是负责界面刷新和显示的线程,你让这个线程sleep了,这个线程就没法工作了,而当线程睡醒后会分别将显示验钞过程和验钞结果的代码分别执行完,这个过程是非常快的,肉眼更本看不到,你看到的就是现实验钞结果的界面了
那我应该怎么用SwingUtilities.invokeLater(new Runnable() {....}这段呢??
O_森_O 2013-09-27
  • 打赏
  • 举报
回复
你上面的程序的问题在于,你调用的sleep方法是在GUI线程里面,也就是负责界面刷新和显示的线程,你让这个线程sleep了,这个线程就没法工作了,而当线程睡醒后会分别将显示验钞过程和验钞结果的代码分别执行完,这个过程是非常快的,肉眼更本看不到,你看到的就是现实验钞结果的界面了
ww-y 2013-09-27
  • 打赏
  • 举报
回复
引用 2 楼 zlgkaixin68 的回复:
Thread.sleep(2000); 能这样子吗? 俺同样新手一个,等高手解答。
可以吧,程序确实有停顿,但是不知道是哪里出现了问题。
ww-y 2013-09-27
  • 打赏
  • 举报
回复
引用 1 楼 trocp 的回复:
大概是以下意思: 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是干什么用的
这个是要在run ()方法里加入sleep()么??我试了一下,还是在验钞界面之前就已经睡了···到睡眠结束之后才弹出来验钞
Panda_熊猫 2013-09-27
  • 打赏
  • 举报
回复
Thread.sleep(2000); 能这样子吗? 俺同样新手一个,等高手解答。
oO临时工Oo 2013-09-26
  • 打赏
  • 举报
回复
大概是以下意思: 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是干什么用的

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧