フォームをフリーズせずに画像を表示する方法
コード内でボタンをクリックすると、画像の読み込みプロセスによってイベントがブロックされます。スレッドをディスパッチし、フォームを一時的にフリーズさせます。これを回避するには、別のスレッドを使用して、バックグラウンドで画像の読み込みを実行できます。
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 サイトの他の関連記事を参照してください。