2

ファイルで指定された一連のポイントをプロットする小さなスイング アプリケーションを作成しています。ガイドラインでは、GUI の新しいスレッドを呼び出すように提案されており、そのために次のコードを使用しました。

java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new View().setVisible(true);
        }
    });

アプリケーションのシナリオの 1 つは、ファイルを開くことです (これは を使用して行われますJFileChooser)。

private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        //some heavy operations
    } else {
        System.out.println("File access cancelled by user.");
    }
}

ポイントのプロットに進む前に、実行する必要がある重い操作がいくつかあります。

私の質問は、GUIスレッドに重いコードを配置することをお勧めしますか? ファイル オブジェクトを処理のためにメイン スレッドに送信し、結果をGUIスレッドに送信することは可能ですか?

私はJava Threading APIについて何も知らないことに注意してください。

4

2 に答える 2

4

useSwingWorker
SwingWorkerは、別のバックグラウンドスレッドで時間のかかるタスクを実行し、この間GUIの応答性を維持することで、これを解決する方法を提案します。

これを見てください

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

http://www.theeggeadventure.com/wikimedia/index.php/SwingWorker_Example

http://weblogs.java.net/blog/mkarg/archive/2010/01/03/did-you-know-swingworker-can-send-progress-status

http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html

于 2013-02-22T14:26:37.527 に答える
1

長時間実行されるタスクの結果が Swing コンポーネントを変更する場合は、SwingWorker. 詳細については、ワーカー スレッドと SwingWorkerを参照してください。

于 2013-02-22T14:23:53.297 に答える