1

JFrame進行状況バーと進行状況バーを表示するバックグラウンドで実行するコードがあります。

Progressbar クラスに runnable を実装し、スレッドを開始しました。しかし、プログレスバーフレームが完全に表示されていません..コードが完全に実行された後、つまりメインスレッドが閉じた後、スタックして完全に表示されます。

私はこれがいくつかの基本的な間違いであることを知っています。

public class ProgressScriptUI extends JFrame implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        setTitle("Progressing to Generate DDL Scripts");
        setBounds(400, 250, 850, 400);
        getContentPane().setLayout(null);
        JProgressBar progressBar= new JProgressBar(0,100);
        progressBar.setBounds(200, 100, 500, 20);
        add(progressBar);
        setVisible(true);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

}

//I am calling the below code in some other class
ProgressScriptUI progress = new ProgressScriptUI();


Thread uiThread = new Thread(progress);                                             
uiThread.start();
oracleValidateOLDorNEW.execute(); //Code that I need to call in back ground
4

2 に答える 2

6

すべての UI コードは、イベント ディスパッチ スレッドのコンテキスト内で実行する必要があります。これにより、UI を最新の状態に保ちながらバックグラウンドで作業を行うのが少し難しくなります。

ソリューションの提案と推奨事項については、Swing での同時実行を参照してください。

おそらく最も簡単な方法は、/データへのSwingWorker機能を持つを使用して、EDT に同期し、コールバックを進行させることです。publishprocess

あなたは見てみることができます

いくつかの例として....

于 2013-04-29T07:02:34.510 に答える
5

UIにSwingを使用していると思います。長時間実行されるタスクにはSwingWorkersを使用します。

于 2013-04-29T06:57:31.917 に答える