java Cosa significa "Impossibile trovare o caricare la classe principale"?





15 Answers

Se il nome del codice sorgente è HelloWorld.java, il codice compilato sarà HelloWorld.class .

Otterrai quell'errore se lo chiami usando:

java HelloWorld.class

Invece, usa questo:

java HelloWorld
java class main

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:

  1. Crea una nuova cartella, C:\temp

  2. 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]);
        }
    }
    
  3. Aprire una riga di comando nella cartella C:\temp e scrivere il seguente comando per compilare la classe Temp:

    javac Temp.java
    
  4. 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.




Posizione del file di classe: C: \ test \ com \ company

Nome file: Main.class

Nome classe completo : com.company.Main

Comando della riga di comando:

java  -classpath "C:\test" com.company.Main

Nota che il percorso di classe NON include \ com \ company




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 srccartella. 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 cdfare 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/




Related