Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come gestire questa eccezione???

1 view
Skip to first unread message

gbattine

unread,
May 19, 2006, 11:05:04 AM5/19/06
to
Salve a tutti,
vorrei chiedervi un aiuto.
Non riesco a gestire correttamente un'eccezione.
Chi può aiutarmi ad eliminarlo?
Grazie

L'errore che ottengo a livello di esecuzione è:

Exception in thread "main" java.lang.NullPointerException
at java.util.StringTokenizer.<init>(Unknown Source)
at java.util.StringTokenizer.<init>(Unknown Source)
at AddDb.ReadArray(AddDb.java:41)
at AddDb.main(AddDb.java:74)


Il codice che ho sviluppato è il seguente:

import java.util.*;
import java.io.*;
public class AddDb {
private static String fileName="Affymetrix_dati.txt";
private static int Ncolumns=0;
private static int Nrows=0;
/*AddDb(String fN)//Il costruttore della classe
{
fileName=fN;
}*/
public int ColumnsNumber(BufferedReader br)throws IOException {

String line = br.readLine(); //legge una linea di testo terminata da /n
o /r e la restituisce come stringa
StringTokenizer st = new StringTokenizer(line); /*La classe
StringTokenizer permette la divisione di una
stringa in tokens (Il tokenizer usa il set di delimitatori di default ,
che è " \t\n\r\f": lo spazio, il tab, l'invio.
I delimitatori non vengono trattati come token.*/
Ncolumns=st.countTokens(); //calcola il numero di token,in questo caso
è il numero di colonne

return Ncolumns;
}

public int RowsNumber(BufferedReader br)throws IOException {

String line = br.readLine();
while (line != null) { //ciclo che conta il numero di righe
arrestandosi al null che indica la fine del file
Nrows++;
line = br.readLine();
}
return Nrows;
}
public double[][]ReadArray(int Nrows,int Ncolumns,BufferedReader
br)throws IOException
{

double[][]x=new double[Nrows][Ncolumns];
for(int i=0; i<Nrows; i++)
{
for(int j=0; j<Ncolumns; j++)
{
try
{
StringTokenizer tok=new StringTokenizer(br.readLine(),"");
x[i][j]=Double.parseDouble(tok.nextToken().trim());//resituisce il
valore double rappresentato dalla stringa(token).
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
}
br.close();


for(int i=0; i<Nrows; i++)
{
for(int j=0; j<Ncolumns; j++)
{
System.out.println(x[i][j]);
}
}
return x;
}
public static void main(String[] args)throws IOException {
FileReader file = new FileReader(fileName); //classe per la lettura di
file di caratteri
BufferedReader br = new BufferedReader(file); /*Legge testo da uno
stream di caratteri di ingresso,
bufferizzando i caratteri in maniera da garantire efficienza di
lettura.*/
double[][]Array;
AddDb db=new AddDb();
db.ColumnsNumber(br);
System.out.println("Il numero di colonne e' :"+Ncolumns);
db.RowsNumber(br);
System.out.println("Il numero di righe e' :"+Nrows);
System.out.println("Caricamento dell'array di double in corso.....");
try
{
System.out.println(db.ReadArray(Nrows,Ncolumns,br));
}
catch(IOException e){
System.out.println(e.getMessage());
}
System.out.println("Fatto");
}
}

pio...@inwind.it

unread,
May 19, 2006, 12:13:50 PM5/19/06
to
Così a naso, vedo che non sempre controlli l'End Of File. Il che vuol
dire che quando ci arrivi, readLine ti restituisce null e tu cerchi di
tokenizzare null.

Giambo

unread,
May 19, 2006, 12:24:55 PM5/19/06
to
gbattine wrote:

> L'errore che ottengo a livello di esecuzione č:


>
> Exception in thread "main" java.lang.NullPointerException
> at java.util.StringTokenizer.<init>(Unknown Source)
> at java.util.StringTokenizer.<init>(Unknown Source)

Probabilmente passi al costruttore di StringTokenizer una stringa che e'
null.

--
Giambo - Occhio al filtro antispam _e_ alla whitelist !

gbattine

unread,
May 19, 2006, 12:38:01 PM5/19/06
to
sì....ma non mi continua l'esecuzione della funzione e commentando il
codice ho visto che si ferma all'inizio di

StringTokenizer tok=new StringTokenizer(br.readLine(),"");
x[i][j]=Double.parseDouble(tok.nextToken().trim());//

Come faccio per risolvere il problema?

gbattine

unread,
May 19, 2006, 6:08:02 PM5/19/06
to
Scusate ragazzi, volevo chiedervi una cosa.
In realtà questa procedura(cioè la ReadArray) deve restituirmi il
valore double di ogni token e crearmi così un array bidimensionale con
questi valori double.
Sapreste consigliarmi un metodo alternativo se non riesco a risolvere
così?
Questa procedura me l'ha passata un tizio che aveva risolto il mio
problema per un file con varie righe ma solo 2 colonne. Io l'ho
adattata per numero variabile di colonne e soprattutto a lui erano solo
colonne di decimali, a me la prima colonna è una stringa(una specie di
codice fiscale..)
Può essere questo il problema?
Vi prego aiutatemi....

Vincent Vega

unread,
May 20, 2006, 3:14:02 AM5/20/06
to
gbattine wrote:

> at AddDb.ReadArray(AddDb.java:41)

Hai provato almeno ad isolare cosa succede alla riga 41?
Lo stacktrace indica la riga di sorgente dove l'eccezione è scatenata.
Il tipo di eccezione indica che viene usato un'oggetto non
inizializzato o a null.
La NullPointerException non va gestita, va prevenuta. Una volta
individuato qual'è il reference che in quella riga è a null decidi
cosa fare sulla base della logica del tuo programma.

giakyt

unread,
May 20, 2006, 11:09:39 AM5/20/06
to

gbattine ha scritto:

> Salve a tutti,
> vorrei chiedervi un aiuto.
> Non riesco a gestire correttamente un'eccezione.
> Chi può aiutarmi ad eliminarlo?
> Grazie
>
> L'errore che ottengo a livello di esecuzione è:
>
> Exception in thread "main" java.lang.NullPointerException
> at java.util.StringTokenizer.<init>(Unknown Source)
> at java.util.StringTokenizer.<init>(Unknown Source)
> at AddDb.ReadArray(AddDb.java:41)
> at AddDb.main(AddDb.java:74)
>

> ... ...

sposta

try {
StringTokenizer tok=new StringTokenizer(br.readLine(),"");

catch(IOException e) {
System.out.println(e.getMessage());
}

nel primo for

ciao

0 new messages