Heim > Java > javaLernprogramm > Wie lade ich Bilder asynchron in Java Swing, um ein Einfrieren der GUI zu verhindern?

Wie lade ich Bilder asynchron in Java Swing, um ein Einfrieren der GUI zu verhindern?

Barbara Streisand
Freigeben: 2024-11-14 13:14:02
Original
331 Leute haben es durchsucht

How to Load Images Asynchronously in Java Swing to Prevent GUI Freezing?

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();
        }
    }
}
Nach dem Login kopieren

Integration in Ihren Code

So integrieren Sie diese Lösung in Ihren Code:

  1. 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();
        // ...
    }
    Nach dem Login kopieren
  2. Entfernen Sie in der displayMap-Methode den Bildladecode und setzen Sie einfach die Sichtbarkeit des Etiketts auf true:

    private void displayMap(...) {
        // ...
        label.setVisible(true);
        // ...
    }
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage