PDA

Visualizza la versione completa : [ JAVA ] Integer number too large


Angelo1974
24-09-2003, 17:06
Salve... ho un thread e per un lavoro particolare voglio esso venga eseguito una volta, dopo di che, tramite il metodo
sleep( long millis )
esso "dorma" per un mese e poi esegua di nuovo l'operazione che deve eseguire; affinchè possa fare ciò ho fatto una cosa del tipo:

public class ConvertXml extends Thread {
//private long dormi = ( 60000*60*24 )*30;
private long dormi = 2592000000;
public ConvertXml( ) {
System.out.println( dormi );
}
public void run(){
while( true ){
Convert c = new Convert();
c.creaXml();
try{
this.sleep( dormi );
}catch( InterruptedException ie ){
System.err.println( "Interrotto "+ ie.getMessage() );
}

}
}
}

Dove 2592000000 è il risultato di ( 60000*60*24 )*30 e cioè il tempo in millisecondi durante cui il thread deve dormire; il problema è che ho un errore del tipo:
Integer number too large ;
però, avendo dichiarato dormi di tipo long, non dovrebbe riuscire a contenere questo valore?Infatti il long in Java è di 64 bit dunque dovrebbe riuscire a contenere da -9223372036854775808 a +9223372036854775807 o sbaglio?
Qualcuno sa dirmi perchè succede ciò? Grazie a tutti e ciao

:ciauz:

LeleFT
24-09-2003, 17:11
Devi mettere la L dopo il numero, altrimenti il compilatore interpreta il tuonumero come una costante intera da convertire (in casting) in long:


private long dormi = 2592000000L; // nota la L dopo il numero


Almento così è scritto nella documentazione Java... :D


Ciao.

Angelo1974
24-09-2003, 17:38
Wow hai ragionissima.....che imbecille... me ne ero proprio dimenticato.... grazie ( P.S.: va bene anche la l minuscola );
thanks very much :p :ciauz:

LeleFT
24-09-2003, 17:40
Per la l minuscola, pensavo anch'io che si potesse fare, ma per evitare di scrivere qualche cavolata ho riportato esattamente un esempio della Sun!

:D :D :D


Ciao.

Loading