Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    NullPointerException nel setIconImage Java

    Salve a tutti, ho un problema nel setIconImage del jframe. Appena eseguo mi lancia un'eccezione;
    questa � la classe:

    package InterfacceGrafiche.SchermataIniziale;
    import Autenticazione.Autenticazione;
    import Registrazione.Registrazione;
    import Control.*;
    import java.awt.Toolkit;
    import javax.swing.ImageIcon;
    /**
    *
    * @author me
    */
    public class SchermataIniziale extends javax.swing.JFrame {
    private AutenticazioneControl control;
    private RegistrazioneControl control1;
    //private Autenticazione finestra2;
    private Registrazione finestra3;
    private static SchermataIniziale frame0;
    //private ImageIcon icona;
    /**
    * Creates new form SchermataIniziale
    */
    public SchermataIniziale() {
    initComponents();
    setFrame(this);
    this.setLocationRelativeTo (null);

    //System.out.println(frame0 == null); //false
    //icona = new ImageIcon("/PNG/iconaprogramma.png");
    //frame0.setIconImage(icona.getImage());
    frame0.setIconImage(Toolkit.getDefaultToolkit().ge tImage(SchermataIniziale.class.getResource("/PNG/car.png")));

    }

    //pi� il vario codice auto-generato da netbeans per il frame


    L'immagine si trova nella directory PNG mentre la classe � nella directory InteracceGrafiche.ScheramataIniziale:
    Schermata 2021-07-31 alle 20.33.27.png

    Ma nonostante scrivo giusto il percorso dell'immagine mi lancia un'eccezione di NullPointerEception nella riga del setIconImage.

    L'unica immagine con cui questo codice funziona, � un immagine creata con powerpoint.
    qualcuno pu� aiutarmi a capire???
    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,356
    Il percorso non deve iniziare con / ovviamente
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Anche usando come percorso "PNG/car.png" mi lancia l'eccezione NullPointerException.

  4. #4
    Quote Originariamente inviata da xXMarcoXx Visualizza il messaggio
    frame0.setIconImage(Toolkit.getDefaultToolkit().ge tImage(SchermataIniziale.class.getResource("/PNG/car.png")));

    Ma nonostante scrivo giusto il percorso dell'immagine mi lancia un'eccezione di NullPointerEception nella riga del setIconImage.
    Quello che probabilmente non ti è ancora chiaro è il concetto applicato dal getResource(). Innanzitutto getResource() rintraccia le risorse usando lo stesso meccanismo che la JVM usa in generale anche per rintracciare le classi, ovvero tramite il concetto di "classpath". E la specifica della risorsa può iniziare o non iniziare con "/", sono DUE aspetti differenti.

    1) UnaClasse.class.getResource("png/immagine.png")

    Se la specifica non inizia con "/", allora la specifica è "relativa" al package della classe. Se UnaClasse è qualificata come com.esempio.UnaClasse, allora la specifica è relativa al package com.esempio, ovvero il percorso cercato dalla radice del classpath è: com/esempio/png/immagine.png
    (com deve trovarsi alla radice lungo il classpath)

    2) UnaClasse.class.getResource("/png/immagine.png")

    Se la specifica inizia con "/" allora è già "assoluta" dalla radice del classpath (e il package della classe NON c'entra), ovvero: png/immagine.png
    (png deve trovarsi alla radice lungo il classpath)

    Dove deve stare la "com" o "png" all'interno del progetto? Questo dipende ANCHE dal tipo di progetto. Se è un normale progetto Java NON basato su Maven/Gradle (o altro tool di build), allora ragionevolmente le risorse possono stare nella stessa directory dei sorgenti ("src", "source" ecc.. a seconda del IDE), perché ci si aspetta che sia l'IDE a "ribaltare" tutti i file non .java nella cartella dei binari ("bin", "output", ecc...).

    src/com/esempio/UnaClasse.java
    src/com/esempio/png/immagine.png (se caso 1)
    src/png/immagine.png (se caso 2)

    Se invece il progetto è basato su Maven/Gradle, si devono seguire assolutamente le loro convenzioni, ovvero le risorse stanno per convenzione/default sotto src/main/resources (e i sorgenti Java sotto src/main/java)

    src/main/java/com/esempio/UnaClasse.java
    ....
    src/main/resources/com/esempio/png/immagine.png (se caso 1)
    src/main/resources/png/immagine.png (se caso 2)

    E una verifica basilare è semplice: si fa un build e si controlla nella cartella dei binari se i file .class generati e le risorse sono presenti secondo quando espresso sopra.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  5. #5
    E' una Java Application con Ant, quindi non basata su Maven o Gradle. Infatti ho creato una cartella in NetBeans a partire dalla radice del percorso del progetto, cioè: src/PNG/immagine.png (la classe è invece src/InterfacceGrafiche/SchermataIniziale).
    Per questo ho usato il getResource("/PNG/immagine.png"), in modo che partisse dalla radice del classpath (cioè da src) senza badare al Package.
    Ciò nonostante mi lancia quell'eccezione.


    Vorrei precisare anche un'altra cosa: lancia l'eccezione con tutte le immagini della cartella "PNG" , ma funziona senza lanciare eccezioni con una sola immagine sempre dentro la stessa cartella. Da questo deduco che il percorso sia corretto, ma continuo a non capire perché non funziona con le altre immagini....
    Potrebbe essere un problema dei file (non credo) o un problema di NetBeans?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,199
    Da quello che vedo, ad essere nullo è l'oggetto "frame0" sul quale stai chiamando setIconImage(): non lo vedo inizializzato da nessuna parte.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    frame0 è il nome del frame che è inizializzato dentro il codice auto-generato di NetBeans;
    ho anche fatto un prova per verificare se fosse nullo, ma non è il frame0 ad essere il problema....

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,199
    Allora quel codice deve funzionare.

    Regola numero 1: MAI farsi autogenerare il codice dei componenti grafici dall'IDE. Mai, MAI!
    Regola numero 2: Il codice dei componenti grafici scrivilo a mano... avrai codice più pulito, più manutenibile, meno prolisso, più performante.

    Prova anche a pulire la directory "dist". Cancellala e ricompila.

    Eventualmente posta tutto lo stackTrace dell'eccezione, magari c'è qualcos'altro che ti sta portando fuori strada.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Dovrei credo aggiungere la setIconImage() all'interno del codice initComponents() autogenerato; Provo ad aggiungere l'icona dalle proprietà del jFrame di NetBeans e speriamo.
    Farò sapere, grazieeee

  10. #10
    Ho finalmente risolto; ho semplicemente aggiunto il codice dalle proprietà dei jFrame e cancellato la cartella dist ed ha funzionato.
    Grazie mille a tuttiiii

Tag per questa discussione

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