Array di oggetti solleva eccezione

di il
8 risposte

Array di oggetti solleva eccezione

Salve, sto facendo un array di oggetti che si genera premendo un jButton. Ora non so per quale motivo mi solleva queste eccezioni. Il codice dal mio punto di vista è corretto, ma so di certo che non è la macchina a sbagliare . Se potreste aiutarmi ve ne sarei grado. Vi allego l'array ed il codice del Button.

Metodo generazione array

public void generaquiz()
    {
        dizio[0].d="In quale regione italiana si trova il Monferrato?";
        dizio[0].r2="Piemonte";
        dizio[0].r3="Lazio";
        dizio[0].r4="Veneto";
        dizio[0].r5="Campania";
        dizio[0].rg=2;
        
        dizio[1].d="Quale città si chiamava anticamente Partenope?";
        dizio[1].r2="Genova";
        dizio[1].r3="Napoli";
        dizio[1].r4="Palermo";
        dizio[1].r5="Atene";
        dizio[1].rg=3;
        
        dizio[2].d="Come era chiamato nel calendario romano il primo giorno del mese?";
        dizio[2].r2="Calende";
        dizio[2].r3="Primus";
        dizio[2].r4="Lonedi";
        dizio[2].r5="FirstMonth";
        dizio[2].rg=2;
        
        dizio[3].d="In quale nazione è nato Charlie Chaplin?";
        dizio[3].r2="Olanda";
        dizio[3].r3="Inghilterra";
        dizio[3].r4="Stati Uniti";
        dizio[3].r5="Paesi Bassi";
        dizio[3].rg=3;
        
        dizio[4].d="Chi è l'autore della poesia <A Sivlia>?";
        dizio[4].r2="Foscolo";
        dizio[4].r3="Pirandello";
        dizio[4].r4="Leopardi";
        dizio[4].r5="Verga";
        dizio[4].rg=4;
        
        dizio[5].d="In quale parte del corpo è situata la milza";
        dizio[5].r2="Fianchi";
        dizio[5].r3="Petto";
        dizio[5].r4="Addome";
        dizio[5].r5="Gamba";
        dizio[5].rg=5;
        
        dizio[6].d="In un sol colpo uccise un quarto dell'umanità?";
        dizio[6].r2="Thanos";
        dizio[6].r3="Dio";
        dizio[6].r4="Caino";
        dizio[6].r5="Superman";
        dizio[6].rg=4;
        
        dizio[7].d="Il delfino è:";
        dizio[7].r2="Un pesce";
        dizio[7].r3="Un mammifero";
        dizio[7].r4="Un anfibio";
        dizio[7].r5="Un rettile";
        dizio[7].rg=3;
        
        dizio[8].d="Chi era il padre di Apollo";
        dizio[8].r2="Poseidone";
        dizio[8].r3="Efesto";
        dizio[8].r4="Zeus";
        dizio[8].r5="Crono";
        dizio[8].rg=4;
        
        dizio[9].d="Chi ha scoperto il vaccino antirabbico?";
        dizio[9].r2="Pasteur";
        dizio[9].r3="Giovanni Vachino";
        dizio[9].r4="Keplero";
        dizio[9].r5="Sforza";
        dizio[9].rg=2;
        
        dizio[10].d="Cos'è il Favonio";
        dizio[10].r2="Un animale";
        dizio[10].r3="Una malattia";
        dizio[10].r4="Un vento";
        dizio[10].r5="Un lago";
        dizio[10].rg=4;
        
        dizio[11].d="Chi fu l'astronomo che per primo dichiarò che la Terra gira intorno al sole^";
        dizio[11].r2="Galilei";
        dizio[11].r3="Verdi";
        dizio[11].r4="Newton";
        dizio[11].r5="Copernico";
        dizio[11].rg=5;
        
        dizio[12].d="A quale stato appartengono i Lettoni?";
        dizio[12].r2="Urss";
        dizio[12].r3="Lettoland";
        dizio[12].r4="Polonia";
        dizio[12].r5="Normandia";
        dizio[12].rg=2;
        
        dizio[13].d="Qual era il titolo nobiliare di Cavour?";
        dizio[13].r2="Duca";
        dizio[13].r3="Conte";
        dizio[13].r4="Arciduca";
        dizio[13].r5="Arconte";
        dizio[13].rg=3;
        
        dizio[14].d="Quale grande musicista nacque a Bonn?";
        dizio[14].r2="Verdi";
        dizio[14].r3="Giasone";
        dizio[14].r4="Beethoven";
        dizio[14].r5="Mozart";
        dizio[14].rg=4;
        
        dizio[15].d="Quanti stati fanno parte dell'unione europea?";
        dizio[15].r2="15";
        dizio[15].r3="21";
        dizio[15].r4="25";
        dizio[15].r5="28";
        dizio[15].rg=5;
        
        dizio[16].d="Cosa significa 'genetliaco'";
        dizio[16].r2="Compleanno";
        dizio[16].r3="Cresima";
        dizio[16].r4="Comunione";
        dizio[16].r5="Legame genetico";
        dizio[15].rg=2;
        
        dizio[17].d="Cos'ha inventato Hoann Gutenberg?";
        dizio[17].r2="Stampa a colori";
        dizio[17].r3="Stampa a caratteri mobili";
        dizio[17].r4="Carta carbone";
        dizio[17].r5="Nessuna delle risposte precedenti";
        dizio[15].rg=2;
        
        dizio[18].d="Come si chiamava il cavallo di Alessandro Magno";
        dizio[18].r2="Bucefalo";
        dizio[18].r3="Furia";
        dizio[18].r4="Yago";
        dizio[18].r5="Nerone";
        dizio[15].rg=2;
        
        dizio[19].d="Cos'è il tartan";
        dizio[19].r2="Un ingrediente";
        dizio[19].r3="Etnia";
        dizio[19].r4="Tessuto";
        dizio[19].r5="Salsa";
        dizio[15].rg=4;
        
        dizio[20].d="Da dove proviene lo Scirocco";
        dizio[20].r2="Nord";
        dizio[20].r3="Nord-Ovest";
        dizio[20].r4="Sud-Est";
        dizio[20].r5="Est";    
    }
    
jButton

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      

            generaquiz();
            
            jTextField1.setText(quiz[0].d);
            jButton2.setText(quiz[0].r2);
            jButton3.setText(quiz[0].r3);
            jButton4.setText(quiz[0].r4);
            jButton5.setText(quiz[0].r5);
Eccezioni

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at lotteria.FLotteria.generaquiz(FLotteria.java:33)
	at lotteria.FLotteria.jButton1MouseClicked(FLotteria.java:704)
	at lotteria.FLotteria.access$500(FLotteria.java:17)
	at lotteria.FLotteria$6.mouseClicked(FLotteria.java:565)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
	at java.awt.Component.processMouseEvent(Component.java:6536)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2237)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2295)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
	at java.awt.Container.dispatchEventImpl(Container.java:2281)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

8 Risposte

  • Re: Array di oggetti solleva eccezione

    zuzzorellone ha scritto:


    Ora non so per quale motivo mi solleva queste eccezioni.
    Il codice postato purtroppo non è molto chiaro. Nel primo pezzo si vede l'accesso ad un array dizio, nel secondo si vede l'uso di un'altro array quiz.
    E ... quindi? Dove sono? Cosa sono? Sono la stessa cosa?


    P.S. Un quiz andrebbe "modellato" un po' diversamente da quanto si vede ..
  • Re: Array di oggetti solleva eccezione

    Quando si vuole creare ed usare un array di oggetti ci sono 3 cose che devono essere fatte prima di poterlo usare e vanno fatte esattamente in ordine. Supponendo di voler creare un array di 5 elementi di oggetti "Pippo", questo è ciò che fa vatto:
    
    // 1 - Dichiarazione dell'array
    Pippo[] mioArray;
    
    // 2 - Creazione e dimensionamento dell'array
    mioArray = new Pippo[5];
    
    // 3 - Creazione di ciascun elemento dell'array
    mioArray[0] = new Pippo();
    mioArray[1] = new Pippo();
    ...
    
    // Solo ora potrò usare le proprietà di ciascun oggetto contenuto nell'array
    
    In realtà i punti 1 e 2 possono essere accorpati in un'unica istruzione:
    
    Pippo[] mioArray = new Pippo[5];
    
    Dall'eccezione che hai postato è chiaro che ti sei dimenticato almeno una delle 3 cose essenziali.

    Ciao.
  • Re: Array di oggetti solleva eccezione

    Okay che sono alle prime armi ma non così tanto, ho dichiarato l'array ed ogni suo elemento nella classe.
    L'array quiz invece è un altro array ad oggetti che si ottiene dal mescolamento del dizio. Scusate l'omissione.
    
    public void mescola()
        {
            int j;
            for(j=0;j<15;j++)
            {
                int r = random.nextInt(20);
                if(quiz[j].rg==0)
                {
                    quiz[j].d=dizio[r].d;
                    quiz[j].r2=dizio[r].r2;
                    quiz[j].r3=dizio[r].r3;
                    quiz[j].r4=dizio[r].r4;
                    quiz[j].r5=dizio[r].r5;
                    quiz[j].rg=dizio[r].rg;
                }
                else
                {
                    j--;
                }
            }
        }
  • Re: Array di oggetti solleva eccezione

    Ma il null pointer a che riga te lo da? vedo riga 33, ma non ho i numeri di riga nel codice
  • Re: Array di oggetti solleva eccezione

    zuzzorellone ha scritto:


    Okay che sono alle prime armi ma non così tanto, ho dichiarato l'array ed ogni suo elemento nella classe.
    Non lo metto in dubbio, ma da quel poco codice che hai postato (anche nel tuo ultimo intervento: troppo poco codice per poter capire COSA sia nullo, visto che non si vede l'istanziazione di nulla), non lo possiamo di certo sapere, né esserne certi.

    Quel che è certo (non un'ipotesi, ma CERTO!) è che se hai una NPE in una di quelle righe di codice che usando l'array, l'errore è quello che ho detto io: o l'array non è istanziato o uno dei suoi elementi non è istanziato. Non ci si scappa. Poi magari il problema deriva da un banale hiding, ma quello è.

    Nel tuo primo intervento hai postato l'eccezione:
    
    at lotteria.FLotteria.generaquiz(FLotteria.java:33)
    
    Alla riga 33 del file FLotteria.java stai accedendo ad un oggetto nullo. Di tutto il codice che hai postato, qual è la riga 33 del file FLotteria.java?

    All'inizio hai postato il codice di un metodo generaquiz()... se è quello il metodo della classe FLotteria, dato che sono tutte istruzioni che accedono agli elementi dell'array non ci si scappa...

    Ciao.
  • Re: Array di oggetti solleva eccezione

    Dichiarazione degli array di oggetti:
    
    Quiz[] dizio= new Quiz[20];
    Quiz[] quiz= new Quiz[15];
    
    Riga 33
    dizio[0].d="In quale regione italiana si trova il Monferrato?";
    Contenuto classe Quiz
    
    public class Quiz
    {
        String r2,r3,r4,r5,d;
        int rg; 
    }
    
    Spero che questi dati aggiuntivi vi siano utili
  • Re: Array di oggetti solleva eccezione

    Sì... prima di poter fare
    
    dizio[0].d="In quale regione italiana si trova il Monferrato?";
    
    devi aver fatto da qualche parte
    
    dizio[0] = new Quiz();
    
    (punto 3 del mio primo post)

    L'hai fatto?
  • Re: Array di oggetti solleva eccezione

    Ops, ho letto i tuoi tre punti in precedenza, ma ho confuso ciò che intendevi. Ora l'ho fatto e non mi solleva alcuna eccezione! Perdona la mia poca attenzione a ciò che hai scritto, e la mia sfacciatagine ^.^'
    Tutto funzionante, grazie mille a tutti!

    (Mini software che simula il famoso gioco "Chi vuol essere milionario" molto basico e semplice)
Devi accedere o registrarti per scrivere nel forum
8 risposte