PDA

Visualizza versione completa : [Java] Problema con exception "NoClassDefFoundError"


radial85
04-01-2006, 18.28.17
Ciao a tutti. Sarei molto grato a chiunque riuscisse a trovare il motivo dell'exception NoClassDefFoundError che si verifica nel main
di questo programma che viene compilato correttamente.
L'exception si verifica sulla classe CentroControllo.Ogni consiglio/supposizione è ben accetto.
Grazie




import prog.io.*;

//Creazione InvalidDataException
class InvalidDataException extends Exception {
public InvalidDataException(){
}
}

//Creazione classe CorpoCeleste
class CorpoCeleste {
//Dichiarazione attributi
double massa;
double distanza;
//Costruttore
CorpoCeleste (double m,double d) {
massa=m;
distanza=d;
}
//Metodo ForzaGravitazionale
double ForzaGravitazionale() {
return this.massa / (this.distanza * this.distanza);
}
}

//Creazione classe CentroControllo
public class CentroControllo {
//Dichiarazione attributi
public double soglia;
//Costruttore
public CentroControllo (double s) {
soglia=s;
}

//Metodo Controlla
public boolean Controlla(CorpoCeleste c) {
return (c.ForzaGravitazionale() > this.soglia);
}
//Main
public static void main (String[] args) {
ConsoleInputManager in= new ConsoleInputManager();
ConsoleOutputManager out= new ConsoleOutputManager();
double m1,d1;
boolean valido=true;
do{
try {

m1=in.readDouble ("Inserisci la massa realativa al corpo celeste \n");
d1=in.readDouble ("Inserisci la distanza del suddetto corpo celeste dal pianeta Terra \n");
if (m1>0 && d1>0) {
CorpoCeleste c1= new CorpoCeleste(m1,d1);
}
else
throw new InvalidDataException();

}catch (InvalidDataException e) {
out.println("IMMISSIONE NON VALIDA: Uno o entrambi i valori inseriti sono negativi");
valido=false;
}
}while (valido==false);
}
}

Dav82
04-01-2006, 18.52.04
Puoi postare esattamente tutto l'errore che ti viene generato? Così mi è più facile scovare il problema :)

radial85
04-01-2006, 20.26.33
D:\>java CentroControllo.java
Exception in thread "main" java.lang.NoClassDefFoundError: CentroControllo/java

D:\>

radial85
05-01-2006, 16.09.44
Hai una qualche idea?! Se hai anche un qualche dubbio dimmelo, please, ho provato di tutto ormai!!!

Dav82
05-01-2006, 17.10.03
I problemi sono due.

1) Al comando java, che è nient'altro che un modo per lanciare l'inteprete di bytecode java, devi dare in pasto un file compilato, e non il sorgente java :)

Il comando corretto è quindi "java CentroControllo", dato ovviamente nella directory dove si trova il file CentroControllo.class, ovvero il compilato o meglio bytecodato :D del file CentroControllo.java


2) i file che importi, ovvero quelli in prog.io.*, saranno nel path del compilatore (a proposito: cosa usi?), che li trova a compile-time e riesce a generare il bytecode; se però il bytecode di questi file non è nel path di sistema (variabile d'ambiente) o nella stessa directory (o in una sottodirectory, con il percorso dei package correttamente indicato), l'interprete java non lo trova, e genera questo errore di classe non trovata, che è - nel tuo caso - relativo alla classe ConsoleInputManager, che è la prima classe non conosciuta all'interprete java istanziata nel main di CentroControllo.

Probabilmente (anzi, sicuramente) se lanci l'esecuzione del programma direttamente dal tuo IDE, non ci saranno problemi, perchè così come ha trovato i file di prog.io.* per compilare, li troverà per eseguire.


Tutto chiaro? :)

radial85
05-01-2006, 17.24.41
Tutto chiaro, grazie. Si trattava solo dell'errore idiota relativo all'esecuzione... le variabili d'ambiente e le librerie sono a posto.
Che errore del ca**o! E dire che ne ho già fatti decine di pgm in java! :D

Dav82
05-01-2006, 17.26.49
(Y) :)