2

いくつかのボタンを含むダイアログがあります。特定のボタンがクリックされると、そのActionListenerは、完了するまでに数秒かかるプロセスを開始します。この間、ユーザーにフィードバックを提供したいと思います。簡単な方法として、ダイアログ「Computing ...」に、最初は表示されていないラベルがあります。コードセグメントは次のようになります

button_OpenHoursReport.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        lbl_Computing.setVisible(true);
        new runAndRenderReport();
        RunAndRenderReport.main(null);
        lbl_Computing.setVisible(false);
    }
});

問題は、RunAndRenderReportが完了するまでlbl_Computingテキストが表示されないことです。明らかに、それはユーザーにとってあまり役に立ちません。ここからどこへ行けばいいのかわからない。これはスレッドと関係がありますか?もしそうなら、私は始める方法についていくつかのガイダンスを使うことができます。

4

2 に答える 2

5

actionPerformed()はGUIスレッド(EDT)で実行されるため、集中的な操作を実行しないでください。代わりにSwingWorkerを使用してください。

SwingWorkerの仕組みをご覧ください。

于 2013-02-28T19:10:06.477 に答える
1

SwingWorkerを使用するよりもはるかに簡単なトリックは、setVisible(true)を呼び出した後、ラベルでpaintImmediatelyを呼び出すことです。効果がすぐにわかるはずです。

lbl_Computing.paintImmediately(0, 0, lbl_Computing.getWidth(), lbl_Computing.getHeight());

ただし、レポートの実行中にGUIを他の方法でも応答させたい場合は、SwingWorkerが最適です。

于 2013-02-28T19:21:36.403 に答える