Comment afficher une image sans figer le formulaire
Dans votre code, lorsque vous cliquez sur le bouton, le processus de chargement de l'image bloque l'événement thread de répartition, provoquant le gel temporaire du formulaire. Pour éviter cela, vous pouvez utiliser un thread séparé pour effectuer le chargement de l'image en arrière-plan.
Solution utilisant javax.swing.SwingWorker
Le javax.swing.SwingWorker La classe vous permet d'exécuter une tâche dans un thread séparé tout en mettant à jour l'interface utilisateur (UI) à partir de la tâche. Voici comment vous pouvez l'utiliser pour résoudre votre problème :
Dans votre classe "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();
Ce code crée un SwingWorker qui s'exécute dans un thread séparé . La méthode doInBackground() charge l'image à partir de l'URL sans bloquer le thread de répartition des événements. Lorsque l'image est chargée, la méthode done() est appelée sur le thread de répartition des événements, où l'image est affichée et le formulaire est mis à jour. Cette approche permet au formulaire de rester réactif pendant le chargement 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!