GUI 多线程编程

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

 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]
    }


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


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

yeah,简单的多线程处理

你可能感兴趣的:(多线程,编程,工作,Web,D语言)