Questo articolo illustra cosa è NoclassDeffoundError e fornisce risoluzioni. Fornisce due scenari importanti per l'eccezione da lanciare e fornisce le rispettive risoluzioni.
Scenario della riga di comando
Una situazione di esempio in cui ciò può verificarsi è la seguente: Supponiamo che la directory DIR1 esista nell'utente@Hostname: ~ $ Directory. Nella directory, dir1, il file sorgente Java, TheClass.Java, ha la classe Java principale, il tetto. Ora, al prompt dei comandi, utente@hostname: ~ $, il programmatore compila il file di origine.Java, con il comando:
Javac Dir1/TheClass.GiavaLa compilation passerà correttamente per avere un file bytecode, TheClass.Classe, che sarebbe stata prodotta nella directory DIR1. Se il programmatore continua quindi a eseguire il file, il punto.classe, con il seguente comando:
Java Dir1/TheClassAl terminale, avrebbe ricevuto il messaggio di errore:
Errore: non è stato possibile trovare o caricare la classe principale dir1.La classeIl programmatore può pensare che ciò sia dovuto al fatto che non ha scritto l'intero nome file di bytecode al prompt dei comandi. Quindi potrebbe provare a eseguire il programma con il seguente comando:
Java Dir1/TheClass.classeSe lo facesse, avrebbe ricevuto il messaggio di errore:
Errore: non è stato possibile trovare o caricare la classe principale dir1.La classe.classeQuesto articolo è su NoclassDeffounderror, e quindi ClassNotFoundException non sarebbe affrontato. Il comando,
Java Dir1/TheClassdovrebbe funzionare, ma non ha funzionato. Secondo l'autore, il vero problema in questa situazione è con il linguaggio Java e non quello del programmatore.
NoclassDeffoundError in Java si verifica quando Java Virtual Machine non è in grado di trovare una particolare classe in fase di esecuzione. Questo può accadere anche all'interno di un programma in esecuzione - vedi sotto.
Risoluzione
Per risolvere questo problema, vai alla directory, Dir1 ed esegui il programma da lì, con i seguenti comandi, al terminale, dalla directory dell'utente:
CD DIR1Scenario di classe bytecode mancante
In questa sezione, l'utente della directory@hostname: ~/dir1 $, verrà utilizzato esclusivamente. Considera il seguente programma Java:
classe aclassSupponiamo che questo sia in un file e salvato con il nome, Mainclass.Java nella directory, user@hostname: ~/dir1 $. Il comando seguente compilerà il file:
User@hostname: ~/dir1 $ javac mainclass.GiavaIl risultato sarà due file, Mainclass.Java e Mainclass.classe, nella stessa directory, dir1. Mainclass.Java è il file di origine e la mainclass.La classe è il file bytecode. Per eseguire un programma in Java, è il file di codice byte che viene eseguito. Il seguente comando al terminale eseguirà il programma:
User@hostname: ~/dir1 $ java mainclassNotare che ".Class ”non è digitato, sebbene sia il suo file che è coinvolto. Non dovrebbe esserci alcun output perché nel programma non esiste un comando di stampa. Dovrebbe esserci solo il nuovo prompt dei comandi, indicando che la classe Mainclass ha eseguito correttamente il programma. Ecco come funziona Java.
Avere le classi come due file di file
Le due classi precedenti possono essere salvate come due diversi file di origine, con i nomi, ACLASS.Java e TheClass.Giava. Una classe.Java avrebbe il codice per l'aclass e il tetto.Java avrebbe il codice per Mainclass, con il suo nome file rinominato per la protezione.
Quando questi due file si trovano nella stessa directory, DIR1, solo TheClass.Java deve essere nel comando di compilazione. Integrerebbe aclass.Giava . Il seguente comando è sufficiente:
User@hostname: ~/dir1 $ javac theclass.GiavaNella directory, DIR1, risulteranno due nuovi file: Theclass.Classe e Aclass.classe . Questi sono file bytecode. La classe.La classe corrisponde al tetto.Java e aclass.La classe corrisponde al tetto.classe.
Ora, per eseguire il programma, solo il tetto.Il file di classe deve essere comandato (senza estensione, ".classe"). Integrerà il file bytecode, aclass.classe. Il seguente comando è sufficiente per eseguire la classe:
User@hostname: ~/dir1 $ java theclassCome prima, non c'è output. Il nuovo prompt dei comandi dovrebbe apparire, mostrando che il programma è stato eseguito correttamente.
NoclassDeffoundError in Java si verifica quando Java Virtual Machine non è in grado di trovare una particolare classe in fase di esecuzione. Ciò può accadere anche all'interno di un programma in esecuzione, come è illustrato in questa sezione.
Ora, aclass.La classe è parte integrante del tetto.classe. In altre parole, il tetto.La classe non può funzionare senza aclasse.classe. Quindi, se ACLASS.La classe viene eliminata o rinominata, verrebbe lanciato NoclassDeffounderror. La visualizzazione dell'errore del terminale, per il comando sopra, sarebbe:
Eccezione nel thread "Main" Java.Lang.NOCLASSDEFFOUNDERROR: ACLASSRisoluzione
Questo problema può essere risolto come segue: se l'Aclass.La classe è stata trasferita lontano dalla sua directory, dovrebbe essere riportata. Se è stato eliminato, supponendo che l'aclass.Java e aclass.Java non è stato eliminato, quindi il programma deve essere ricompilato, con
User@hostname: ~/dir1 $ javac theclass.Giavae un nuovo aclass.la classe nella directory, DIR1, verrebbe creata. E il comando,
User@hostname: ~/dir1 $ java theclassnon emetterebbe il messaggio di errore lungo sopra per NocLassDeffOunderror.
Possibilità di recuperare
NoclassDeffoundError è un errore di runtime, quindi non dipende davvero dal programmatore da recuperare da esso. Come spiegato sopra, il modo migliore per gestire il problema è per risoluzione.
Conclusione
Nel Java.Lang.* pacchetto, c'è una classe denominata, NoclassDeffounderror. La descrizione di qualsiasi classe è la definizione della classe. NoclassDeffoundError non è per la definizione di classe trovata Errore. Questo viene lanciato quando l'istanza della Java Virtual Machine (JVM) o un Classloader tenta di caricare nella definizione di una classe, ma non è stata trovata alcuna definizione della classe.
NoclassDeffoundError è un errore di runtime, quindi non dipende davvero dal programmatore da recuperare da esso. Il modo migliore per gestire il problema è per risoluzione: utilizzare il comando riga di comando per eseguire il comando nella directory di interesse. Sostituire qualsiasi .file di classe; Non è lì che doveva essere.