Visualizzazione dei risultati da 1 a 10 su 37

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho risolto il punto 1. ponendo la gif in una JLabel e ponendola sopra la JLabel che contiene l'immagine di default.

    Resta il problema del punto 2: come faccio ad interrompere il thread quando la nuova immagine di mappa mi viene caricata e visualizzata?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Resta il problema del punto 2: come faccio ad interrompere il thread quando la nuova immagine di mappa mi viene caricata e visualizzata?
    Quando ImageIO.read ha terminato, hai creato ImageIcon e l'hai settato .... il run() termina.

    Scusa ma l'esempio di Icon di proxy l'hai visto??

    P.S. Ah, il tuo codice non è nemmeno correttissimo al 100%, stai aggiornando il componente mapHolder nel contesto di un thread che non è il EDT.
    Ultima modifica di andbin; 04-04-2015 a 16:40
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quando ImageIO.read ha terminato, hai creato ImageIcon e l'hai settato .... il run() termina.
    Faccio questo:
    codice:
    BufferedImage bimg = ImageIO.read(mapUrl);
                        Icon img = new ImageIcon(bimg);
                        mapHolder.setIcon(img);
    ma il run() continua..

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Scusa ma l'esempio di Icon di proxy l'hai visto??
    Si , l'ho visto ed ho anche cercato di provarlo ma non riuscivo a capire quale dei miei parametri passare al metodo:
    codice:
     public void paintIcon(final Component c, Graphics g, int x, int y) {
    ...
    Component c e Graphics g, cosa sono? cosa devo passargli ?


    P.S. Ah, il tuo codice non è nemmeno correttissimo al 100%, stai aggiornando il componente mapHolder nel contesto di un thread che non è il EDT.[/QUOTE]

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho provato il metodo da te consigliato, apportando delle modifiche:
    codice:
    import java.net.*;
    import javax.swing.*;
    
    public class ImageProxy  {
    
        volatile ImageIcon imageIcon;
        final URL imageURL;
        Thread retrievalThread;
        boolean retrieving = false;
    
        public ImageProxy(URL url) {
            imageURL = url;
        }
    
        public int getIconWidth() {
            if (imageIcon != null) {
                return imageIcon.getIconWidth();
            } else {
                return 800;
            }
        }
    
        public int getIconHeight() {
            if (imageIcon != null) {
                return imageIcon.getIconHeight();
            } else {
                return 600;
            }
        }
    
        synchronized void setImageIcon(ImageIcon imageIcon) {
            this.imageIcon = imageIcon;
        }
    
        public void paintIcon(final JLabel c, JLabel g) {
            if (imageIcon != null) {
                imageIcon.setImage(null);
            } else {
                Icon loading = new ImageIcon("src//immagini//loading.gif");
                g.setIcon(loading);
                System.out.println(retrieving);
                while (!retrieving) {
                    retrieving = true;
                    System.out.println(retrieving);
                    retrievalThread = new Thread(new Runnable() {
                        public void run() {
                            try {
                                setImageIcon(new ImageIcon(imageURL, ""));
                                System.out.println(imageURL);
                                c.setIcon(imageIcon);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    retrievalThread.start();
                }
            }
        }
    }
    richiamandolo così:

    codice:
    String mapUrlFormat = ("https://maps.googleapis.com/maps/api/staticmap?center....");
                URL mapUrl = new URL(mapUrlFormat);
                ImageProxy loadingProxy;
                loadingProxy = new ImageProxy(mapUrl);
                loadingProxy.paintIcon(mapHolder, loadingGif);
    ma il thread non riesco a fermarlo quando viene caricata la nuova mappa...non so come fare!!

    Dove sbaglio ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.