Lorsqu'une image est chargée depuis le Web vers un panneau, l'interface graphique peut congeler jusqu'à ce que le processus de chargement soit terminé. Cela peut être ennuyeux pour les utilisateurs.
Pour éviter le gel de l'interface graphique, pensez à utiliser javax.swing.SwingWorker. Cette classe permet le chargement d'images en arrière-plan tout en gardant le thread GUI actif.
L'exemple suivant montre comment utiliser SwingWorker pour charger des images :
import java.awt.*; import java.io.IOException; import java.net.URL; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.*; public final class WorkerTest extends JFrame { private final JLabel label = new JLabel("Loading..."); public WorkerTest() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); label.setHorizontalTextPosition(JLabel.CENTER); label.setVerticalTextPosition(JLabel.BOTTOM); this.add(label); this.pack(); this.setLocationRelativeTo(null); } private void start() { new ImageWorker().execute(); } public static void main(String args[]) { EventQueue.invokeLater(() -> { WorkerTest wt = new WorkerTest(); wt.setVisible(true); wt.start(); }); } class ImageWorker extends SwingWorker<Image, Void> { private static final String TEST = "http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"; @Override protected Image doInBackground() throws IOException { Image image = ImageIO.read(new URL(TEST)); return image.getScaledInstance(640, -1, Image.SCALE_SMOOTH); } @Override protected void done() { try { ImageIcon icon = new ImageIcon(get()); label.setIcon(icon); label.setText("Done"); WorkerTest.this.pack(); WorkerTest.this.setLocationRelativeTo(null); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } }
Dans ce exemple :
En utilisant SwingWorker, le processus de chargement de l'image peut s'exécuter en arrière-plan, permettant à l'interface graphique de rester réactive pendant que l'image est récupérée et affichée.
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!