ホームページ >Java >&#&チュートリアル >Java で効率的な GUI タスク管理のために Swing Timer と SwingWorker を使用する方法
GUI での繰り返しおよび長時間実行タスクのための Swing Timer と SwingWorker の使用
グラフィカル ユーザー インターフェイス (GUI) で、アプリケーションの応答性は非常に重要です。ネットワーク呼び出しや負荷の高い計算など、長時間実行または反復的なタスクを実行すると、適切に処理されないと UI がフリーズする可能性があります。
反復タスク用のスイング タイマー
タスクの場合一定の間隔で繰り返す必要がある場合 (サーバーからのデータでラベルを更新する場合など)、Swing は Timer クラスを提供します。タイマーには遅延と、タイマーがトリガーされたときに実行するアクションを定義する ActionListener を設定できます。
長時間実行タスク用の SwingWorker
SwingWorker は Swing SwingUtilities を拡張するコンポーネントであり、長時間かかるタスク向けに設計されています。これにより、UI の応答性を維持しながら、バックグラウンド スレッドでタスクを実行できます。タスクが完了すると、SwingWorker は、結果で UI を更新するようにメイン スレッドに通知します。
例: サーバー Ping 結果によるラベルの更新
Timer と SwingWorker を組み合わせて使用する場合は、次のコード スニペットを検討してください。
<code class="java">import javax.swing.*; import java.awt.event.*; import java.net.Socket; public class LabelUpdateExample { private static String hostnameOrIP = "stackoverflow.com"; private static int delay = 5000; private static JLabel label = new JLabel("0000"); public static void main(String[] args) { label.setFont(label.getFont().deriveFont(120f)); ActionListener timerListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new PingWorker().execute(); } }; Timer timer = new Timer(delay, timerListener); timer.start(); JOptionPane.showMessageDialog( null, label, hostnameOrIP, JOptionPane.INFORMATION_MESSAGE); timer.stop(); } private static class PingWorker extends SwingWorker { private int time; @Override protected Object doInBackground() throws Exception { time = pingTime(); return new Integer(time); } @Override protected void done() { label.setText("" + time); } } private static int pingTime() { Socket socket = null; long start = System.currentTimeMillis(); try { socket = new Socket(hostnameOrIP, 80); } catch (Exception weTried) { } finally { if (socket != null) { try { socket.close(); } catch (Exception weTried) {} } } long end = System.currentTimeMillis(); return (int) (end - start); } }</code>
このコードは、指定されたホストへの ping 時間を表示する JLabel を作成し、タイマーを使用して 5 秒ごとに更新します。 UI のフリーズを避けるために、ping 操作はバックグラウンド スレッド utilizando SwingWorker で実行されます。 ping が完了すると、SwingWorker はその結果でラベルを更新し、長時間実行されているタスクでも GUI の応答性を維持します。
以上がJava で効率的な GUI タスク管理のために Swing Timer と SwingWorker を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。