其实我对界面编程是不触的,只是用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
日子久了,居然也心里慢慢有点发憷了, :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