5

私たちのSwingアプリケーションは、優れたSwingWorkerクラスを使用して、バックグラウンドスレッドでいくつかの長時間実行タスクを実行します。ただし、古いMacの多くはJava 5しかサポートしていないため、アプリケーションを6ではなく5としてコンパイルしたいと考えています。SwingWorkerはJava 6で導入されたため、使用できなくなりました。

バックグラウンドで何かを実行し、完了したらGUIでそれを伝達するだけでよい場合、以下は許容できる代替品でしょうか?それとも私は何か重要なことを忘れていますか?

public static void wannabeSwingWorker(final Runnable doInBackground, final Runnable callback) {
    Thread backgroundThread = new Thread(new Runnable() {
        public void run() {
            doInBackground.run();
            SwingUtilities.invokeLater(callback);
        }
    });
    backgroundThread.start();
}
4

4 に答える 4

10

あなたのコードの適合性について他の誰かにコメントしてもらいますが、別の方法として、Java 5 で使用するための Swingworker のバックポートをここからダウンロードできます。

于 2010-11-02T10:11:47.060 に答える
3

コードは正しく動作するはずです。もちろん、SwingWorker の他のすべての機能 (部分的な結果と進行状況を返す、キャンセル可能である、リスナーをサポートする) は失われます。

于 2010-11-02T10:14:02.173 に答える
2

ほとんどの Swing 同時実行ライブラリとは異なる動作をするFoxtrotを見てください。

バックグラウンド スレッドを起動して長時間実行タスクを実行する代わりに、Swing EDT で長時間実行タスクを実行し、新しいスレッドを起動して GUI イベントを処理することにより、モーダル ダイアログ ボックスを表示するときに Swing が採用するアプローチをエミュレートします。

すぐに対処する必要がある値を返す長時間実行タスクを操作する場合、これにより、非常に見栄えの良い手続き型/非並行のプログラム コードが作成されます ( からの戻り値をチェックするのとまったく同じですJOptionPane.showConfirmDialog(...))。

于 2010-11-02T19:48:30.213 に答える
1

製品の LGPL コードに問題がない場合は、SwingWorker のバックポート バージョンを Java 5 に使用できます。

http://java.net/projects/swingworker

于 2010-11-02T10:19:50.123 に答える