GUI 多线程编程

其实我对界面编程是不触的,只是用JAVA开发以来很少开发桌面程序,于是对界面编程慢慢生疏,除了在毕业设计的时候用SWT搞了个比较丑陋的SPEM(过程定义语言)到(XPDL)工作流语言的转换器之外,好像很少编写界面程序,连小APPLET都很少碰。
日子久了,居然也心里慢慢有点发憷了, :D 想想看,也实在是挺搞笑的。
前些天开发的JAVA APPLET界面很简单,但是,因为该APPLET通过WEB SERVICE和服务器端进行交互,会占用很长的时间。
为了增强用户的交互性,我们不能让界面主线程长期执行,不能返回。因此,我们需要增加在主线程中另外启动一个线程A,使用这个线程A来完成基线的建立。该线程每完成一步操作之后,需要启动另外的线程B1, B2, B3...更新主线程的界面。
更新的操作如下:

[code] private void updateGUI4(final boolean step4) {
Runnable r = new Runnable() {
public void run() {
if (!step4) {
getStep2StatusLabel().setText("第二步错误");
} else {
progressBar.setValue(40);
progressBar.setStringPainted(true);
getStep2StatusLabel().setText("完成第二步");
}
}
};

[color=red]invokeAndWait(r);[/color]
}[/code]

invokeAndWait()是调用并且event-dispather线程执行完了这段代码之后等待R执行完成才返回。
[code] private void invokeAndWait(Runnable r) {
try {
SwingUtilities.invokeAndWait(r);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
[/code]

如果采用SwingUtilities.invokeLater(r);的话,event-dispather可能还没Y有执行这段代码,就返回了,那么也就是说界面可能在线程A,执行到之后的很多步骤的时候,还没有更新界面,这样就不符合我的要求了:)

yeah,简单的多线程处理 :D
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值