Java Swing フォームをフリーズさせずに画像をロードするにはどうすればよいですか?

DDD
リリース: 2024-11-24 14:35:12
オリジナル
729 人が閲覧しました

How to Load an Image Without Freezing Your Java Swing Form?

フォームをフリーズせずに画像を表示する方法

コード内でボタンをクリックすると、画像の読み込みプロセスによってイベントがブロックされます。スレッドをディスパッチし、フォームを一時的にフリーズさせます。これを回避するには、別のスレッドを使用して、バックグラウンドで画像の読み込みを実行できます。

javax.swing.SwingWorker を使用した解決策

javax.swing.SwingWorkerクラスを使用すると、タスクからユーザー インターフェイス (UI) を更新しながら、別のスレッドでタスクを実行できます。これを使用して問題を解決する方法は次のとおりです。

「client_Trackbus」クラス内:

 SwingWorker<Image, Void> imageLoader = new SwingWorker<Image, Void>() {

     @Override
     protected Image doInBackground() throws Exception {
         // Load the image from URL in a separate thread
         URL imageURL = new URL("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg");
         Image image = Toolkit.getDefaultToolkit().createImage(imageURL);
         return image;
     }

     @Override
     protected void done() {
         try {
             // Display the loaded image on the panel
             ImageIcon icon = new ImageIcon(get());
             label.setIcon(icon);
             jPanel1.add(label);

             // Resize the panel to fit the image
             jPanel1.setSize(label.getPreferredSize());

             // Update the form
             getContentPane().add(jPanel1);
             revalidate();
             repaint();
         } catch (Exception ex) {
             // Handle any exceptions here
         }
     }
 };

 // Start the image loading task in the background
 imageLoader.execute();
ログイン後にコピー

このコードは、別のスレッドで実行される SwingWorker を作成します。 。 doInBackground() メソッドは、イベント ディスパッチ スレッドをブロックせずに、URL から画像を読み込みます。画像がロードされると、イベント ディスパッチ スレッドで done() メソッドが呼び出され、画像が表示され、フォームが更新されます。このアプローチにより、画像の読み込み中もフォームの応答性を維持できます。

以上がJava Swing フォームをフリーズさせずに画像をロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート