Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31

    Caricare immagine in ImageIcon da URL

    Salve ragazzi, vorrei chiedervi una mano. Ho quasi ultimato un mio progetto e vi ho inserito delle immagini in questo modo:

    codice HTML:
    ImageIcon img1=new ImageIcon("Percorsoassoluto\\immagine.png");
      JLabel sfondo=new JLabel(img1);
      JPanel sfondofinale=new JPanel();
      sfondofinale.add(sfondo);
    Poi ho aggiunto il pannello al JFrame.
    Ora però sorge il problema della visualizzazione su altri pc.
    Il progetto lo devo inviare per email al mio professore e quindi non si aprirebbero le immagini, così ho pensato di caricare le immagini su tinypic, prendere l'url e utilizzarlo per creare la mia ImageIcon ma non lo so fare. Ho trovato sul web questo codice:

    codice HTML:
    String url="http://.........ecc...immagine.png";
    java.net.URL where = new URL(url);
    ImageIcon img1 = new ImageIcon(where);
    Ma mi dà errore alla seconda riga senza spiegarmi, quindi non so come fare.
    Mi date una mano?
    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Ora però sorge il problema della visualizzazione su altri pc.
    I percorsi "assoluti" su file-system "cablati" nei sorgenti infatti non vanno assolutamente bene, in generale. Se non per prove o verifiche fatte "al volo" e temporanee.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    ho pensato di caricare le immagini su tinypic
    No, non scherziamo .... innanzitutto ci sarebbero tempi più lunghi di caricamento (e potenzialmente anche disservizi) ma questo obbliga chi usa il tuo programma ad avere una connessione a internet. Che non è sempre così scontato ....

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    codice HTML:
    String url="http://.........ecc...immagine.png";
    java.net.URL where = new URL(url);
    ImageIcon img1 = new ImageIcon(where);
    Ma mi dà errore alla seconda riga senza spiegarmi, quindi non so come fare.
    Non so quale è il url esatto che hai messo. Il url deve essere un riferimento DIRETTO alla immagine png. NON può essere quello di una pagina web che contiene la immagine o permette di scaricare la immagine in qualche modo particolare.
    Inoltre visto che per ogni richiesta HTTP viene passato al server lo "user-agent", allora tinypic (come qualunque altro server su internet) potrebbe in teoria rifiutare la request poiché non proviene da un browser vero e proprio.
    Insomma, sono solo casini ....

    E comunque tutto questo non va bene. Se vuoi portabilità e nessun problema particolare, dovresti sfruttare il principio delle "risorse" come inteso dai getResource o getResourceAsStream di java.lang.Class (o generalizzando di un ClassLoader) che si basano sulla ricerca lungo il "classpath".

    Se hai una tua classe con nome qualificato es. org.esempio.Prova, se nel package "esempio" metti una cartella es. "images", puoi metterci un file immagine in modo che il path dalla radice del classpath sia

    org/esempio/images/immagine.png

    A quel punto all'interno della classe Prova (o qualunque altra classe) puoi fare

    URL url = Prova.class.getResource("images/immagine.png");

    oppure se sei in un metodo di istanza (o costruttore) in Prova, anche:

    URL url = getClass().getResource("images/immagine.png");

    Dal momento che la specifica della risorsa non inizia con "/", il "images" è relativo al package della classe. E quindi appunto viene cercato un path "org/esempio/images/immagine.png" in classpath.

    Classi e risorse di questo tipo possono anche essere impacchettate insieme in un singolo jar.

    Vedi getResource per i dettagli fini.
    Ultima modifica di andbin; 07-01-2017 a 15:09
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Grazie mille per la precisa spiegazione... Ho provato a farlo!
    Allora ho il mio workspace e ho inserito una cartella chiamata images che contiene l'immagine PrimaFinestra.png all'interno del package view dove appunto si trova la classe, così:

    Progettocentrosportivo.bin.view.images

    La mia classe (chiamata anch'essa PrimaFinestra) si trova in view e ho scritto questo codice:

    codice HTML:
    java.net.URL url = PrimaFinestra.class.getResource("images/PrimaFinestra.png");
    ImageIcon img1=new ImageIcon(url);
    JLabel sfondo=new JLabel(img1);
    E ho fatto il resto. Ho provato ad eseguire il tutto da eclipse e funziona!!!
    Adesso funzionerà così anche se invio il progetto al mio prof?
    Ora però se esporto il progetto in un file eseguibile, non si apre proprio! Mentre col vecchio metodo si apre... Come mai?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Progettocentrosportivo.bin.view.images
    "bin" è la cartella che Eclipse nei normali Java Project mette i "compilati"?
    NON devi mettere nulla esplicitamente lì sotto.

    Se è un normale Java Project (cioè non basato su Maven), file .java e risorse possono stare assieme sotto la src.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    "bin" è la cartella che Eclipse nei normali Java Project mette i "compilati"?
    NON devi mettere nulla esplicitamente lì sotto.

    Se è un normale Java Project (cioè non basato su Maven), file .java e risorse possono stare assieme sotto la src.
    Ti faccio vedere come è organizzato il tutto.
    Questo è l'interno della cartella del mio progetto, chiamata "Progetto centro sportivo".



    la cartella "images" è quella con le immagini e non so dove collocarla... Quando stava nella cartella view all'interno di bin funzionava (tranne per l'eseguibile), altrove no ( mi da errore Exception in thread "main" java.lang.NullPointerException) quindi chiedo a te dove dovrei metterla

    Dentro bin ho questo:
    S
    E sono i miei packages (La classe PrimaFinestra dove deve comparire l'immagine si trova in view)
    All'interno ancora ho i file class

    In src ho lo stesso contenuto di bin ma con i file java

    In lib ci ho messo i file per le librerie...

    Ho voluto spiegare tutto casomai ho sbagliato qualcosa...

    Questa cartella images quindi dove dovrei metterla?
    Grazie ancora per la tua pazienza e i tuoi consigli

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    la cartella "images" è quella con le immagini e non so dove collocarla...
    No, non deve stare nella "home" del progetto. Deve stare sotto "src", mettendola chiaramente nel package che è corretto per la specifica che passi a getResource.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Quando stava nella cartella view all'interno di bin
    Non devi mettere nulla manualmente e espressamente nella "bin". La bin è la destinazione del build, può essere cancellata e ricreata ogni volta che serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    EDIT. Ci sono riuscita! Non avevo refreshato! Grazie

    Ora quando invierò il progetto al prof per email lui visualizzerà tutto correttamente?
    Ultima modifica di raissa95; 07-01-2017 a 17:01

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Allora, ho inserito la cartella images in "src" e poi in "view" che è il package che contiene la mia classe PrimaFinestra.
    Le hai spostate da fuori Eclipse o con i tools di Eclipse? Se esternamente, poi devi refreshare il progetto.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Ho fatto proprio come mi hai detto ma il risultato è stato: Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)java.lang.NullPointerException
    Non capisco dove ho sbagliato
    Assicurato che gli spostamenti sono corretti, se:

    1) Hai una immagine es. src/view/images/immagine.png
    2) Hai un sorgente es. src/view/PrimaFinestra.java (ovvero una classe PrimaFinestra che è nel package "view" e contiene la dichiarazione package view; )

    Allora È corretto: PrimaFinestra.class.getResource("images/immagine.png")

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Le hai spostate da fuori Eclipse o con i tools di Eclipse? Se esternamente, poi devi refreshare il progetto.


    Assicurato che gli spostamenti sono corretti, se:

    1) Hai una immagine es. src/view/images/immagine.png
    2) Hai un sorgente es. src/view/PrimaFinestra.java (ovvero una classe PrimaFinestra che è nel package "view" e contiene la dichiarazione package view; )

    Allora È corretto: PrimaFinestra.class.getResource("images/immagine.png")

    Tutto qui.
    Avevo editato il precedente messaggio per non inserirne troppi, errore mio: bastava un semplice refresh del progetto e adesso funziona! Inoltre funziona anche l'eseguibile...
    Come chiedevo prima, ora quando invierò la cartella col mio progetto per email al prof non ci saranno errori di visualizzazione utilizzando questa metodica, giusto?
    Grazie ancora

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    quando invierò la cartella col mio progetto per email al prof non ci saranno errori di visualizzazione utilizzando questa metodica, giusto?
    Esatto, sarà corretto. Perché non dipende dalla directory "corrente" o da URL su internet. Si basa sul "classpath" e se trova le tue classi, il runtime Java troverà pure le tue risorse.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.