PDA

View Full Version : [Java] non capisco l'errore


Killian
13-03-2005, 16:27
ho un problema, probabilmente la soluzione è stupida ma non ci arrivo.
Leggendo il listato seguente:

public class Nome_classe {

int corrente = 0;
Nomeclasse_interna[] tr = new Nomeclasse_interna[4];

/** Creates a new instance of Nome_classe */
public Nome_classe() {
popola_tr();

}

public void popola_tr(){
this.tr[0].attributo1="stringa";
......
}
}


dove Nomeclasse_interna è dichiarata nello stesso package di Nome_classe, non ho problemi di compilazione, ma se provo ad eseguire il programma principale, quando creo un'istanza di Nome_classe ottengo un errore nel metodo popola_tr(), del tipo: "Exception in thread "main" java.lang.NullPointerException".

L'errore mi segnala le righe nell'ordine:
- this.tr[0].attributo1="stringa";
- popola_tr();
- Nome_classe asdf = new Nome_classe();
dove la terza è nel main.

Dove sbaglio?

Nomeclasse_interna è dichiarata come segue:

class Nomeclasse_interna {
String attributo1;
...............
}

ed è nello stesso file sorgente di Nome_classe

tglman
13-03-2005, 18:20
Prova a cambiare cosi:

public class Nome_classe{

int corrente = 0;
Nomeclasse_interna[] tr;

/** Creates a new instance of Nome_classe */
public Nome_classe() {
tr=new Nomeclasse_interna[4]
popola_tr();
}

public void popola_tr(){
this.tr[0].attributo1="stringa";
......
}
}

Killian
13-03-2005, 20:17
stesso problema, l'errore me lo da quando richiamo il metodo
- popola();

Lo so perchè tra
- tr=new Nomeclasse_interna[4];
e
- popola_tr();

ho inserito una System.out.println("..."); e la riga di testo viene correttamente visualizzata.

l'errore dovrebbe essere alla riga
- this.tr[0].attributo1="stringa";
visto che è la prima che viene segnalata

:cry:

il main è banalmente:

public static void main(String[] args) {
Nome_classe pro = new Nome_classe();
System.out.println("messaggio");
.......

e l'istruzione "System.out.println("messaggio");" non viene eseguita

kingv
13-03-2005, 20:44
guarda che con questo:

Nomeclasse_interna[] tr = new Nomeclasse_interna[4];


dichiari e istanzi un array di 4 oggetti di classe Nomeclasse_interna, ma gli oggetti all'interno dell'array non li hai mai istanziati ;)

in altre parole this.tr[0] è null quando ci accedi all'interno di popola_tr()

Killian
13-03-2005, 21:51
Originariamente inviato da kingv
guarda che con questo:

Nomeclasse_interna[] tr = new Nomeclasse_interna[4];


dichiari e istanzi un array di 4 oggetti di classe Nomeclasse_interna, ma gli oggetti all'interno dell'array non li hai mai istanziati ;)

in altre parole this.tr[0] è null quando ci accedi all'interno di popola_tr()

non sono sicuro di aver capito, cosa intendi per istanziare gli oggetti all'interno dell'array?
Non ho ancora capito come risolvere.

Scusa, ma sono ancora un principiante in Java.:p

MSciglio
13-03-2005, 22:30
Originariamente inviato da Killian
non sono sicuro di aver capito, cosa intendi per istanziare gli oggetti all'interno dell'array?
Non ho ancora capito come risolvere.

Scusa, ma sono ancora un principiante in Java.:p

Nomeclasse_interna[] tr = new Nomeclasse_interna[4];
for (int i=0; i<4; i++)
tr[i]=new Nomeclasse_interna;

kingv
14-03-2005, 08:23
Originariamente inviato da Killian
non sono sicuro di aver capito, cosa intendi per istanziare gli oggetti all'interno dell'array?


vedi risposta di MSciglio ;)
un conto e' istanziare l'array, un altro è istanziare ogni oggetto all'interno dello stesso. La seconda operazione non e' effettuata in automatico dalla prima.

Killian
15-03-2005, 20:02
grazie a tutti :mano: