Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15

    Exception in thread "main" java.lang.NullPointerException

    Ciao a tutti.

    Quandro provo a compilare il programma a terminale compare:

    "run:
    Exception in thread "main" java.lang.NullPointerException
    at it.science.unitn.esame.PGrid.<init>(PGrid.java:29)
    at it.science.unitn.esame.Pannello.<init>(Pannello.ja va:24)
    at it.science.unitn.esame.NewMain.startGraphics(NewMa in.java:24)
    at it.science.unitn.esame.NewMain.<init>(NewMain.java :17)
    at it.science.unitn.esame.NewMain.main(NewMain.java:3 6)
    Java Result: 1


    La classe incriminata è questa:

    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package it.science.unitn.esame;
    
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class PGrid extends JPanel{
        
        int contatore = 0;
        
        public static Caselle[] ArrayCaselle;
        
        PGrid(){
            this.setLayout(new GridLayout(8,8,5,5));
            
            this.ArrayCaselle = new Caselle[64];
            
            for(int i = 0; i< 8; i++){
                for(int j = 0; j<8; j++){ 
                    
                    Caselle c = new Caselle();
                    this.ArrayCaselle[contatore].add(c);
                    contatore++;
                }           
            }
        }
    }

    Dove Caselle è una classe che estende JPanel.

    Sapete dirmi cosa sbaglio? Sono svariate ore che sto provando a modificare il codice, ma non trovo una soluzione.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Hai dichiarato un array, lo hai dimensionato, ma non hai creato nessuno degli oggetti che dovrebbero essere contenuti in esso:

    codice:
    this.ArrayCaselle = new Caselle[64];
    Crea un array di 64 elementi... ciascun elemento è nullo, perchè non è stato creato alcun oggetto Caselle.

    Nel for...
    codice:
    Caselle c = new Caselle();
    this.ArrayCaselle[contatore].add(c);
    Crei un oggetto "Caselle"... lo chiami "c", poi cerchi di richiamare il metodo "add" di un oggetto dell'array in posizione "contatore", che però è ancora nullo, non avendolo mai creato.

    Forse, quello che volevi fare tu era questo:
    codice:
    Caselle c = new Caselle();
    this.ArrayCaselle[contatore] = c;
    ?

    Ovvero, assegnare alla posizione "contatore" dell'array, l'oggetto appena creato.

    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

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Exception in thread "main" java.lang.NullPointerException

    Originariamente inviato da stestisa
    Quandro provo a compilare il programma a terminale compare:

    "run:
    Exception in thread "main" java.lang.NullPointerException
    Le eccezioni saltano fuori a runtime, non a compile time...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    15
    Originariamente inviato da LeleFT
    Hai dichiarato un array, lo hai dimensionato, ma non hai creato nessuno degli oggetti che dovrebbero essere contenuti in esso:

    codice:
    this.ArrayCaselle = new Caselle[64];
    Crea un array di 64 elementi... ciascun elemento è nullo, perchè non è stato creato alcun oggetto Caselle.

    Nel for...
    codice:
    Caselle c = new Caselle();
    this.ArrayCaselle[contatore].add(c);
    Crei un oggetto "Caselle"... lo chiami "c", poi cerchi di richiamare il metodo "add" di un oggetto dell'array in posizione "contatore", che però è ancora nullo, non avendolo mai creato.

    Forse, quello che volevi fare tu era questo:
    codice:
    Caselle c = new Caselle();
    this.ArrayCaselle[contatore] = c;
    ?

    Ovvero, assegnare alla posizione "contatore" dell'array, l'oggetto appena creato.

    Ciao.
    Ecco, questa è una mia lacuna... L'inserimento di elementi nell'array si fa come dici tu (this.ArrayCaselle[contatore] = c; ).

    Grazie a entrambi per l'aiuto!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Originariamente inviato da stestisa
    Ecco, questa è una mia lacuna... L'inserimento di elementi nell'array si fa come dici tu (this.ArrayCaselle[contatore] = c; ).

    Grazie a entrambi per l'aiuto!
    Si tratta semplicemente di un assegnamento, come succede con qualunque altra variabile.
    Nessuno ti vieta di risparmiarti una variabile, anzi, solitamente si fa così:

    codice:
    this.ArrayCaselle[contatore] = new Caselle();
    PS: Le maiuscole usale solo per classi/interface... le variabili e i metodi, nelle convenzioni Java, iniziano sempre con la lettera minuscola.


    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

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.