如何使用线程暂停java中的执行

时间:2012-08-20 11:10:39

标签: java multithreading swing

我以编程方式创建了一个向导。它包含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 Panel后开始执行的函数吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

使用我们刚刚了解到的摇摆工作者,你可以使用这样的东西:

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();

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