0

我以编程方式创建了一个向导。它包含 3 个面板。第二个是devicePane,第三个是detailsPane。第三个面板由一个进度条组成。我希望我的程序process()在显示第三个面板后启动一个功能?可以使用线程吗?

else if(ParserMainDlg.this.POSITION==1){
    if(sqlConnectionPane.executeProcess()==true){    
        devicePane.setDeviceList();                             
         ParserMainDlg.this.POSITION++;
         fireStateChanged(oldValue);
    }
}
else if(ParserMainDlg.this.POSITION==2){
    System.out.println("position:"+ParserMainDlg.this.POSITION);
    if(devicePane.executeProcess()==true){
         ParserMainDlg.this.POSITION++;
         fireStateChanged(oldValue);    
    }

我想sqlConnectionPane.executeProcess()调用一个在显示 devicePane 面板后开始执行的函数?

4

1 回答 1

1

您可以明确地使用线程来执行您的任务,这是处理长时间运行任务的首选方式。

您在这里有多种选择。所有选项都包括对您的向导进行回调,以更新进度条。

您可以创建自己的任务类来完全做到这一点,或者您可以使用现有的SwingWorker。“SwingWorker 本身是一个抽象类;您必须定义一个子类才能创建 SwingWorker 对象;匿名内部类通常对于创建非常简单的 SwingWorker 对象很有用。”

使用我们刚刚了解的 swing worker 可以使用如下内容:

SwingWorker<Integer, Integer> backgroundWork = new SwingWorker<Integer, Integer>() {

        @Override
        protected final Integer doInBackground() throws Exception {
            for (int i = 0; i < 61; i++) {
                Thread.sleep(1000);
                this.publish(i);
            }

            return 60;
        }

        @Override
        protected final void process(final List<Integer> chunks) {
            progressBar.setValue(chunks.get(0));
        }

    };

    backgroundWork.execute();

请注意,您必须将任务分解为更小的部分才能真正显示进度。

于 2012-08-21T11:13:22.103 回答