2014-05-07 43 views
31

Sto eseguendo un semplice programma "HelloWorld". Ottengo questo errore nel prompt dei comandi:"Impossibile trovare o caricare la classe principale" Errore durante l'esecuzione del programma java utilizzando il prompt cmd

Could not find or load main class HelloWorld .

ho impostato la variabile CLASSPATH e PATH nel sistema. Nel prompt cmd, sto correndo dalla directory in cui ho salvato il programma HelloWorld. Posso vedere il nome della classe e il nome del file sono uguali e anche il file .class creato nella stessa directory. Cos'altro potrebbe essere il problema?

Il mio programma di esempio si presenta così:

package org.tij.exercises; 
public class HelloWorld { 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.println("Hello World!!"); 
    } 
} 
+0

Come stai esegue il programma? – Kakarot

+0

Fornire il sistema operativo che si sta utilizzando e la riga di comando che si sta utilizzando per tentare di eseguire il programma. – ErstwhileIII

+0

Il file HelloWorld.class deve trovarsi nella directory org/tij/esercizi. Quindi è possibile eseguire l'esempio con java -cp. org.tij.exercises.HelloWorld –

risposta

36

Quando la classe principale è all'interno di un pacchetto allora avete bisogno di farlo funzionare come segue:

java <packageName>.<MainClassName> 

Nel tuo caso è necessario eseguire il programma come segue:

java org.tij.exercises.HelloWorld 
+9

Ho provato a utilizzare java org.tij.exercises .HelloWorld, sto ancora ricevendo lo stesso errore, senza fortuna !! – user241702

+4

Ciò che ha funzionato per me è stato eseguire il programma come 'java org.tij.exercises.HelloWorld' dalla directory **' target/classes' **. ho provato ad eseguirlo direttamente da 'target/classes/org/tij/esercizi' che non ha funzionato – radoh

17

Qual è il tuo valore CLASSPATH?

Può assomigliare a questo:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

Credo che il vostro valore non contiene questo .;.

Quindi, AGGIUNGETE IT.
volta finito, riavvio CMD

Che può opere.


Per esempio il file HelloWorld.java è in cammino: D:\myjavatest\org\yz\test e il suo package è: org.yz.test.

Ora, ci si trova nel percorso D:\myjavatest\ sulla linea CMD.
tipo questo per compilarlo:

javac org/yz/test/HelloWorld.java 

Poi, tipo questo per eseguirlo:

java org.yz.test.HelloWorld 

Si può ottenere quello che vuoi.

+1

Il mio CLASSPATH ha questo aspetto: C: \ Programmi \ Java \ jdk1.8.0_05 \ bin; C: \ Programmi \ Java \ jdk1.8.0_05 \ jre \ bin; .; – user241702

+0

Ho provato a compilare come sopra, sto ancora affrontando lo stesso problema .. – user241702

+0

Aggiungi ** dt.jar ** e ** tools.jar ** nel tuo CLASSPATH – youngzy

12

Ho rimosso bin dallo CLASSPATH. Ho scoperto che stavo eseguendo il comando java dalla directory in cui si trova la HelloWorld.java, vale a dire:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld

Così mi sono trasferito di nuovo alla directory principale e giustiziato:

java org.tij.exercises.HelloWorld

e ha funzionato, vale a dire:

C:\Users\xyz\Documents\Java\javastudy\src>java org.tij.exercises.HelloWorld

Ciao mondo !!

2

Eseguire il programma Java utilizzando il comando java -d . HelloWorld.

Questo comando funziona quando è stato dichiarato il pacchetto.

. rappresentano directory corrente /.

+1

Vedo l'errore seguente se eseguo il comando "javac -d. HelloWorld". C: \ Users \ xyz \ Documents \ Java \ javastudy \ src \ org \ tij \ esercizi> javac -d. HelloWorld errore: I nomi di classe, 'HelloWorld', sono accettati solo se l'elaborazione delle annotazioni è richiesta esplicitamente 1 errore – user241702

+0

Sì, questo è sbagliato. 'javac' significa java compile, e il compilatore accetta i file * .java, cioè dovrebbe essere' HelloWorld.java'. Quando la classe è compilata, dovresti chiamare il comando 'java', che esegue il file (binario) generato. – mrek

3

Uno dei motivi di questo errore potrebbe essere

Could not find or load main class <class name>

Forse si utilizza il nome della classe come nome diverso e salvare il nome della classe con un altro nome è possibile salvare un nome di file sorgente Java con un altro nome di nome di classe. Per esempio:

class A{ 
    public static void main(String args[]) { 
     System.out.println("Hello world"); 
    } 
} 

si può salvare come Hello.java ma,

Per compilare: javac Hello.java

Questa volontà automatico generare file A.class alla stessa posizione.

ora per eseguire        : java A

0

Ho affrontato lo stesso problema e provato tutto ciò di cui qui. La cosa è che non ho aggiornato il mio progetto in eclissi dopo la creazione della classe. E una volta aggiornato, le cose hanno funzionato come previsto.

1

Ho avuto lo stesso problema, il mio era un po 'diverso anche se non avevo il nome del pacchetto. Il mio problema è stato il percorso della classe, ad esempio:

C:\Java Example>java -cp . HelloWorld 

L'opzione -cp per Java e da quello che posso dire dalla mia esperienza (non molto), ma ho incontrato l'errore di circa 20 volte cercano metodi diversi e fino a quando ho dichiarato il Percorso di classe Stavo ricevendo lo stesso errore. Vishrant aveva ragione nel dichiararlo. rappresenta la directory corrente.

Se sono necessarie ulteriori informazioni sulle opzioni java immettere java -? o java -help, penso che le opzioni non siano opzionali.

Ho appena fatto qualche altra ricerca ho trovato un sito web che entra nei dettagli su CLASSPATH. CLASSPATH deve essere impostato come variabile di ambiente; alla directory corrente <.>. È possibile impostare dalla riga di comando in Windows:

// Set CLASSPATH to the current directory '.' 
prompt> set CLASSPATH=. 

Quando si aggiunge un nuovo ambiente di impostazione è necessario riavviare prima di abilitare la variabile. Ma dal prompt dei comandi puoi impostarlo. Può anche essere impostato come ho detto all'inizio. Per maggiori informazioni e se si utilizza un sistema operativo diverso, verificare: Environment Variables.

4

Dal momento che è in esecuzione dal prompt dei comandi, è necessario assicurarsi che il proprio classpath sia corretto. Se lo si imposta già, è necessario riavviare il terminale per ricaricare le variabili di sistema.

Se -classpath e -cp non sono utilizzati e CLASSPATH non è impostato, la directory corrente viene utilizzata (.), tuttavia durante l'esecuzione .class file, è necessario essere nella cartella che consistono Java package name cartelle.

Quindi, avendo il file .class in ./target/classes/com/foo/app/App.class, hai le seguenti possibilità:

java -cp target/classes com.foo.app.App 
CLASSPATH=target/classes java com.foo.app.App 
cd target/classes && java com.foo.app.App 

È possibile controllare il percorso di classe, stampando CLASSPATH variabile:

  • Linux: echo $CLASSPATH
  • di Windows : echo %CLASSPATH%

che contiene voci separate da :.

Vedi anche: How do I run Java .class files?

1

Ho avuto un problema simile quando si esegue java su win10

invece di

$ java ./hello 
Error: Could not find or load main class ..hello 

Run

$ java hello 
Hello, World 
0

affrontato lo stesso problema. risolto seguendo questi passi

  • andare alla directory che contiene il pacchetto 'org.tij.exercises' (ad esempio: in Eclipse può essere la cartella src)
  • uso java org.tij.exercises.HelloWorld
0

Per un sacco Di noi, almeno per me, penso che la gerarchia del percorso di classe non sia intuitiva dal momento che sto lavorando all'interno di una struttura di directory e sembra che dovrebbe esserlo.

Java sta guardando il nome della classe basata sul suo percorso del pacchetto, non solo il percorso del file.

Non importa se: io sono nella directory locale ./packagefoo/MainClass, o una directory fino ./packagefoo/, o uno giù ./packagefoo/MainClass/foo.

Il comando "java packagefoo.MainClass" è in funzione la radice% CLASSPATH% il che significa che qualcosa di significativo a Java. Poi da lì attraversa i nomi dei pacchetti, non i nomi dei percorsi come ci aspettano i codificatori.

Quindi, se il mio CLASSPATH è impostato su% CWD% /, quindi "java packagefoo.MainClass" funzionerà. Se imposto il CLASSPATH su% CWD%/packagefoo /, non è possibile trovare packagefoo.MainClass. Sempre "java MainClass" significa nulla, se è un membro di "pacchetto", fino a quando non strappo il codice java "pacchetto packagefoo;" e sposta il file di classe su una directory.

Infatti se cambio "pacchetto packagefoo;" a "pacchetto foopackage;" Devo creare una sottocartella sotto CLASSPATH/foopackage o foopackage.MainClass smette di funzionare di nuovo.

A peggiorare le cose, tra PATH, CLASSPATH, JAVAHOME, per Windows, JDeveloper, Oracle Database, e ogni nome utente è stato installato sotto, penso che un codificatore cercando di ottenere solo qualcosa finisce velocemente fino bruta costringendo variabili di percorso e struttura fino a quando qualcosa funziona senza capire cosa significa.

almeno l'ho fatto.

1

Stavo ottenendo lo stesso errore per aver dimenticato di rimuovere l'estensione . Class quando si esegue la classe JAVA. Così, invece di questo:

java myClass.class 

si dovrebbe fare questo:

java myClass 
Problemi correlati