Visualizzazione dei risultati da 1 a 10 su 15

Hybrid View

  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
    Ragazzi ho creato un filechooser che mi seleziona la foto che voglio e poi questa foto viene automaticamente copiata nella cartella images di src. Se faccio refresh al progetto funziona e la visualizza altrimenti no. Come posso fare? Un utente che usa il programma eseguibile non ha il tasto refresh

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Ragazzi ho creato un filechooser che mi seleziona la foto che voglio e poi questa foto viene automaticamente copiata nella cartella images di src. Se faccio refresh al progetto funziona e la visualizza altrimenti no. Come posso fare? Un utente che usa il programma eseguibile non ha il tasto refresh
    Io purtroppo non mi intendo di progetti perché non utilizzo alcun IDE.
    Però non penso che dovresti inserire una risorsa all'interno di src. Almeno per analogia a quanto accade con i Jar.

    Quando lanci un jar non dovresti andare a scrivere nulla all'interno dell'archivio stesso (ad esempio file di preferenze), ma utilizzare una cartella nella "directory corrente" dell'applicazione o creare automaticamente una cartella alla radice del classpath dell'utente e inserire lì tutti i file.
    Io faccio nel primo modo.

    Non so quanto può esserti utile questo, aspetto conferme dai saggi del forum

  9. #9
    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
    Ragazzi ho creato un filechooser che mi seleziona la foto che voglio e poi questa foto viene automaticamente copiata nella cartella images di src. Se faccio refresh al progetto funziona e la visualizza altrimenti no. Come posso fare? Un utente che usa il programma eseguibile non ha il tasto refresh
    Ma infatti NON ha senso. Ti ho già risposto nell'altra discussione.
    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.