Heim >Java >javaLernprogramm >Wie lade ich Bilder asynchron in Java Swing, um ein Einfrieren der GUI zu verhindern?
Ein Bild asynchron laden
Im bereitgestellten Code kann der Bildladevorgang die GUI einfrieren, insbesondere wenn das Bild groß ist oder die Die Netzwerkverbindung ist langsam. Um dieses Problem zu vermeiden und die grafische Benutzeroberfläche reaktionsfähig zu halten, können wir einen Hintergrundthread zum Laden des Bildes verwenden. Diese Technik wird als asynchrones Laden von Bildern bezeichnet.
Verwenden von SwingWorker zum asynchronen Laden
Die javax.swing.SwingWorker-Klasse von Java bietet eine praktische Möglichkeit, Hintergrundaufgaben auszuführen und zu aktualisieren die GUI, wenn sie fertig sind. So können wir damit ein Bild asynchron laden:
import javax.swing.SwingWorker; import java.awt.image.BufferedImage; import javax.swing.JLabel; public class ImageLoader extends SwingWorker<BufferedImage, Void> { private final String imageUrl; private final JLabel label; public ImageLoader(String imageUrl, JLabel label) { this.imageUrl = imageUrl; this.label = label; } @Override protected BufferedImage doInBackground() throws Exception { // Load the image in the background BufferedImage image = ImageIO.read(new URL(imageUrl)); return image; } @Override protected void done() { try { BufferedImage image = get(); // Update the GUI with the loaded image in the EDT label.setIcon(new ImageIcon(image)); } catch (Exception e) { e.printStackTrace(); } } }
Integration in Ihren Code
So integrieren Sie diese Lösung in Ihren Code:
Erstellen Sie in der Klasse client_trackedbus eine Instanz von ImageLoader und führen Sie sie in aus Konstruktor:
public client_trackedbus( ... ) { // ... ImageLoader imageLoader = new ImageLoader("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg", label); imageLoader.execute(); // ... }
Entfernen Sie in der displayMap-Methode den Bildladecode und setzen Sie einfach die Sichtbarkeit des Etiketts auf true:
private void displayMap(...) { // ... label.setVisible(true); // ... }
Wenn Sie diese Schritte befolgen, wird der Bildladevorgang asynchron durchgeführt, sodass die GUI reagiert, während das Bild abgerufen wird.
Das obige ist der detaillierte Inhalt vonWie lade ich Bilder asynchron in Java Swing, um ein Einfrieren der GUI zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!