Chargement d'une image de manière asynchrone
Dans le code fourni, le processus de chargement d'image peut geler l'interface graphique, en particulier lorsque l'image est grande ou que la connexion réseau est lente. Pour éviter ce problème et garder l'interface graphique réactive, nous pouvons utiliser un fil d'arrière-plan pour charger l'image. Cette technique est appelée chargement d'image asynchrone.
Utilisation de SwingWorker pour le chargement asynchrone
La classe javax.swing.SwingWorker de Java fournit un moyen pratique d'effectuer des tâches en arrière-plan et de mettre à jour l'interface graphique une fois qu'ils sont terminés. Voici comment nous pouvons l'utiliser pour charger une image de manière asynchrone :
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(); } } }
Intégration à votre code
Pour intégrer cette solution à votre code :
Dans la classe client_trackedbus, créez une instance d'ImageLoader et exécutez-la dans le constructeur :
public client_trackedbus( ... ) { // ... ImageLoader imageLoader = new ImageLoader("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg", label); imageLoader.execute(); // ... }
Dans la méthode displayMap, supprimez le code de chargement de l'image et définissez simplement la visibilité de l'étiquette sur true :
private void displayMap(...) { // ... label.setVisible(true); // ... }
En suivant ces étapes, le processus de chargement de l'image sera effectué de manière asynchrone, permettant à l'interface graphique de rester réactive pendant la récupération de l'image.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!