java Cosa significa "Impossibile trovare o caricare la classe principale"?
Un problema comune ai nuovi sviluppatori Java è che i loro programmi non riescono a girare con il messaggio di errore: Could not find or load main class ...
Che cosa significa questo, che cosa lo causa e come dovresti risolverlo?
Se il tuo metodo principale è nella classe sotto un pacchetto, dovresti eseguirlo sulla directory gerarchica.
Supponiamo che ci sia un file del codice sorgente (Main.java):
package com.test;
public class Main {
public static void main(String[] args) {
System.out.println("salam 2nya\n");
}
}
Per eseguire questo codice, devi inserire Main.Class
nella Main.Class
del pacchetto ./com/test/Main.Java
. E nella directory root usare java com.test.Main
.
Quello che mi ha aiutato è stato specificare il classpath sulla riga di comando, ad esempio:
Crea una nuova cartella,
C:\temp
Crea il file Temp.java in
C:\temp
, con la seguente classe in esso:public class Temp { public static void main(String args[]) { System.out.println(args[0]); } }
Aprire una riga di comando nella cartella
C:\temp
e scrivere il seguente comando per compilare la classe Temp:javac Temp.java
Esegui la classe Java compilata, aggiungendo l'opzione
-classpath
per consentire a JRE di sapere dove trovare la classe:java -classpath C:\temp Temp Hello!
A volte ciò che potrebbe causare il problema non ha nulla a che fare con la classe principale, e ho dovuto scoprirlo nel modo più difficile. Era una libreria di riferimento che ho spostato e mi ha dato:
Impossibile trovare o caricare la classe principale xxx Linux
Ho appena cancellato quel riferimento, l'ho aggiunto di nuovo e ha funzionato di nuovo bene.
Usa questo comando:
java -cp . [PACKAGE.]CLASSNAME
Esempio: se il tuo nome classe è Hello.class creato da Hello.java, usa il seguente comando:
java -cp . Hello
Se il file Hello.java si trova nel pacchetto com.demo, utilizzare il comando seguente
java -cp . com.demo.Hello
Con JDK 8 molte volte accade che il file di classe sia presente nella stessa cartella, ma il comando java
aspetta un percorso di classe e per questa ragione aggiungiamo -cp .
prendere la cartella corrente come riferimento per classpath.
In questo caso hai:
Impossibile trovare o caricare classpath di classe principale
È perché stai usando "-classpath", ma il trattino non è lo stesso trattino usato da java
sul prompt dei comandi. Ho avuto questo problema di copiare e incollare da Notepad a cmd.
Questo potrebbe aiutarti se il tuo caso è specifico del mio: da principiante mi sono imbattuto in questo problema anche quando ho provato a eseguire un programma Java.
L'ho compilato in questo modo:
javac HelloWorld.java
E ho provato a correre anche con la stessa estensione:
java Helloworld.java
Quando ho rimosso il .java
e .java
riscritto il comando come java HelloWorld
, il programma ha funzionato perfettamente. :)
Prima imposta il percorso usando questo comando;
set path="paste the set path address"
Quindi è necessario caricare il programma. Digita "cd (nome cartella)" nell'unità salvata e compila. Ad esempio, se il mio programma è memorizzato sull'unità D, digita "D:" premi invio e digita "cd (nome cartella)".
Tutte le risposte qui sono dirette verso gli utenti Windows che sembra. Per Mac, il separatore del classpath è:, not ;
. Come errore durante l'impostazione del percorso di classe ;
non viene lanciato quindi questo può essere difficile da scoprire se proviene da Windows a Mac.
Ecco il comando Mac corrispondente:
java -classpath ".:./lib/*" com.test.MyClass
Dove in questo esempio il pacchetto è com.test
e una cartella di lib
deve essere inclusa in classpath.
Su Windows, inserisci .;
il valore CLASSPATH all'inizio.
Il . (punto) significa "guarda nella directory corrente". Questa è una soluzione permanente.
Inoltre è possibile impostarlo "una volta" con il set CLASSPATH=%CLASSPATH%;.
. Questo durerà finché la finestra di cmd sarà aperta.
A volte, in alcuni compilatori online che avresti potuto provare, riceverai questo errore se non scrivi public class [Classname]
ma solo class [Classname]
.
Hai davvero bisogno di farlo dalla src
cartella. Lì digiti la seguente riga di comando:
[name of the package].[Class Name] [arguments]
Diciamo che la tua classe è chiamata CommandLine.class
, e il codice assomiglia a questo:
package com.tutorialspoint.java;
/**
* Created by mda21185 on 15-6-2016.
*/
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Allora dovresti cd
fare la cartella src e il comando che devi eseguire sarà simile a questo:
java com.tutorialspoint.java.CommandLine this is a command line 200 -100
E l'output sulla riga di comando sarebbe:
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
Ho anche affrontato errori simili durante il test di una connessione JDBC Java MongoDB. Penso che sia bene riassumere la mia soluzione finale in breve in modo che in futuro chiunque possa esaminare direttamente i due comandi e sia opportuno procedere ulteriormente.
Supponiamo che tu sia nella directory in cui esistono il tuo file Java e le dipendenze esterne (file JAR).
Compilare:
javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
- -cp - argomento classpath; passare tutti i file JAR dipendenti uno per uno
- * .java - Questo è il file di classe Java che ha il metodo principale. sdsd
Correre:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
- Si prega di osservare i due punti (Unix) / virgola (Windows) dopo che tutti i file JAR di dipendenza terminano
- Alla fine, osserva il nome della classe principale senza alcuna estensione (non .class o .java)
In Java, quando a volte esegui JVM dalla riga di comando utilizzando l'eseguibile java e stai provando ad avviare un programma da un file di classe con public static void main (PSVM), potresti eseguire l'errore seguente anche se il parametro classpath la JVM è accurata e il file di classe è presente sul classpath:
Error: main class not found or loaded
Questo succede se non è possibile caricare il file di classe con PSVM. Una possibile ragione è che la classe stia implementando un'interfaccia o estendendo un'altra classe che non si trova sul classpath. Normalmente se una classe non è sul classpath, l'errore lanciato indica come tale. Ma, se la classe in uso è estesa o implementata, java non è in grado di caricare la classe stessa.
Riferimento: https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/