2011-04-07 15 views
6

Sto imparando Java sto avendo problemi nell'esecuzione di un programma di esempio.java.lang.NoClassDefFoundError

ho due file:

GoodDog.java:

class GoodDog { 
    private int size; 
    public int getSize() { 
     return size; 
    } 

    public void setSize(int s) { 
     size = s; 
    } 

    void bark() { 
     if (size > 60) { 
     System.out.println("Wooof! WoooF!"); 
     } else if (size > 14) { 
     System.out.println("Ruff! Ruff!"); 
     } else { 
     System.out.println("Yip! Yip!"); 
     } 
    } 
} 

GoodDogTestDrive.java:

class GoodDogTestDrive { 
    public static void main (String[] args) { 
     GoodDog one = new GoodDog(); 
     one.setSize(70); 
     GoodDog two = new GoodDog(); 
     two.setSize(8); 
     System.out.println("Dog one: " + one.getSize()); 
     System.out.println("Dog two: " + two.getSize()); 
     one.bark(); 
     two.bark(); 
    } 
} 

Essi vengono digitati esattamente come sono nel libro e compilare senza problema. Quando provo a correre GoodDogTestDrive ottengo questo:

nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ java GoodDogTestDrive.class 
java.lang.NoClassDefFoundError: GoodDogTestDrive/class 
Exception in thread "main" nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ 

Che cosa sto facendo di sbagliato?

+0

Sto cercando la domanda generica che risponde a domande di questo tipo, sono estremamente comuni e dovresti essere in grado di capirlo guardando un post correlato. Se qualcuno mi picchia sull'URL, per favore postalo. –

+4

Ogni volta che metti uno spazio vicino al paren, rabbrividisco. – alternative

risposta

14

non includono il .class nel comando:

java GoodDogTestDrive 
+0

Grazie funziona! Mi chiedo perché rimuovere .class lo fa funzionare ... Dovrò farlo su Google. –

+0

Ho fatto lo stesso errore quando ho iniziato quel libro;) –

+0

@is_shields perché un '.' è un operatore di risoluzione scope in Java, quindi GoodDogTestDrive.class fa riferimento alla classe chiamata' class' del pacchetto 'GoodDogTestDrive', che ovviamente non esiste. Questo è il motivo per cui il tuo messaggio di errore ha 'GoodDogTestDrive/class' in esso – bluesmoon

0

Se il file di classe GoodDog non si trova nella directory di lavoro corrente si avrà bisogno di impostare il classpath sul comando java ....

java GoodDogTestDrive -cp ./path/to/gooddog/ 
1

basta eseguire il programma con "java yourClass".

Non utilizzare .class alla fine.

Provalo e faccelo sapere.

-1

Ero di fronte allo stesso problema di te.

ho risolto il problema in questo modo:

  1. Controllare il percorso di classe nelle variabili Evironment
  2. ho aperto il progetto in navigazione di Eclipse e ho controllato i file di classe. I miei file di classe erano in cartelle diverse non nella cartella bin. Ho appena copiato i file mancanti nella cartella bin quindi il problema è stato risolto.

È sufficiente copiare i file .class mancanti bin directory del progetto Eclipse risolto il problema.

11

È importante notare che mentre la risoluzione era semplice per questo problema (semplicemente rimuovendo .class dalla riga di comando Java), java.lang.NoClassDefFoundError può essere difficile da individuare nel contesto degli sviluppi di applicazioni Web Java.

Questa eccezione Java indica che una classe Java "runtime" non può essere caricata e/o trovata nel classloader del contesto thread corrente. Questo è normalmente il risultato di:

  • Libreria mancante nel percorso di classe di runtime.
  • Static {} block errore di esecuzione del programma di inizializzazione (impedendo il caricamento della classe della classe interessata).
  • Confezione file JAR/class loader tree problemi come il mix di file JAR distribuiti sul child & caricatore classe genitore.

Si consiglia a qualsiasi principiante Java di comprendere correttamente questo tipo di problema in previsione di futuri episodi di risoluzione dei problemi.

0

Problema-java.lang.NoClassDefFoundError

Root Cause: percorso Java non corretto impostato in Ambiente di sezione variabile

Soluzione: Impostare corretta JAVA_HOME Percorso

Steps-> Ambiente Impostazioni variabili (My Comp-Fare clic destro -> Proprietà-> Variabile Env-> Scheda Avanzate -> Variabile)

  1. Crea nuova variabile di ambiente JAVA_HOME.

    JAVA_HOME **.;C:\Program Files (x86)\Java\jdk1.6.0_14** 
    
  2. Set variabile JAVA_HOME nella sezione variabile PATH.

    PATH %JAVA_HOME%\bin 
    
  3. Set JAVA_HOME variabile CLASSPATH variabile

    CLASSPATH %JAVA_HOME%\jre\lib 
    
  4. Riavvia sistema

  5. Verifica tutte le variabili

    echo %CLASSPATH% 
    
    echo %JAVA_HOME% 
    
    echo %PATH% 
    
  6. Compile classe Java javac Test.java

  7. Run Java Test di programma Java

0

generata se la JVM o un'istanza ClassLoader cerca di caricare nella definizione di una classe (chiamata di metodo o la creazione di una nuova istanza) e nessuna definizione della classe potrebbe essere trovato.

Il motivo per NoClassDefFoundError è che una determinata classe non è disponibile in runtime ma era disponibile durante la compilazione.

1.La classe appartiene a un file JAR o JAVA mancante JAR o JAVA o JAR non è stato aggiunto in classpath.

2. Classe non disponibile in Classpath Java.

3. NoClassDefFoundError in Java a causa dell'eccezione nel blocco statico di inizializzazione. quando la classe esegue alcune inizializzazioni statiche nel blocco statico e se il blocco statico genera un'eccezione, la classe che è riferita a questa classe otterrà NoclassDefFoundError in Java.

4.Your Classpath, PATH o JAVA_HOME non è configurato correttamente o l'installazione di JDK non è corretta. che può essere risolto con reinstallando JDK.

5.Do un Maven clean-installazione e semplicemente riavviare il server con i file necessari di origine (.java).

Problemi correlati