0

プログラムでウィザードを作成しました。3つのパネルが含まれています。2 番目は devicePane で、3 番目は detailsPane です。3 番目のパネルは進行状況バーで構成されます。process()3 番目のパネルを表示した後、プログラムで関数を開始するようにしたいのですが? スレッドを使用することは可能ですか?

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 に答える