2013-07-05 34 views
6

Im usando Fedora 19. Contenuto di HelloWorld.java:java Impossibile trovare o caricare classe principale

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

posso successo compilarlo usando

javac HelloWorld.java

ma non può essere eseguito utilizzando

java HelloWorld

Segnala il seguente errore

Error: Could not find or load main class HelloWorld

Ma posso eseguirlo usando

sudo java HelloWorld

Che cosa mi manca qui ???

+0

Hai il permesso di esecuzione per 'java' sotto il tuo utente? – MadProgrammer

+0

Hai accidentalmente compilato come superutente? –

+0

@MadProgrammer Come posso verificarlo? –

risposta

9

Non si imposta un percorso di classe che include la classe compilata! java non è in grado di trovare alcuna classe se non dici dove cercare.

Prova java -cp . HelloWorld

Fonte here

Non so perché funziona con sudo però. La mia ipotesi * sarebbe, che il CLASSPATH è impostato per l'utente root e non per l'utente corrente.

+0

Funziona con questo ... Perché devo scrivere -cp? Cosa significa? –

+0

È un requisito per linux in quanto funziona solo su Windows? – MadProgrammer

+0

cp sta per ClassPath, ovvero tutti i percorsi/cartelle in cui è possibile trovare le classi. l'operatore punto indica "directory locale" il parametro –

0

Questo è piuttosto bizzarro. È sembra come il problema è che quando si esegue java come utente non privilegiato non è possibile trovare o leggere il file ".class". Ma quando si esegue come "root", è possibile.

Questo suggerisce che in qualche modo sei riuscito a creare il file "HelloWorld.class" con il proprietario sbagliato e/o le autorizzazioni sbagliate.

Verificare le autorizzazioni eseguendo ls -l HelloWorld.class. Il proprietario deve essere il tuo account utente (non "root") e hai bisogno dell'autorizzazione di lettura dell'utente sul file.

Qui ci sono un paio di altre possibili spiegazioni:

  • Il comando java si esegue potrebbe non essere quello che si pensa che è. Controlla cosa dice which java quando lo fai da solo. Verifica che sia l'eseguibile "reale" java e non alcuni script o qualcosa nella directory corrente o qualche altra directory che non sarà nella root/sudo $PATH.

  • È possibile che sia stata impostata la variabile di ambiente CLASSPATH in modo che la directory corrente (dove "HelloWorld.class" è ... presumo) non si trovi nel classpath. Ma quando si sudo java, il comando java è in esecuzione con un ambiente in cui $CLASSPATH non è impostato. In tal caso, se non è presente l'argomento -cp, verrà visualizzato un percorso di classe predefinito costituito da solo "."; cioè la directory corrente.


Se il problema risulta essere la variabile d'ambiente CLASSPATH, vi consiglio di unset ... e modificare i file "RC" della vostra shell di disinserire anche lì.

Utilizzare invece il comando '-cp' sul comando java, il comando javac e così via ... e passare a Ant o Maven o a un IDE per la creazione e l'esecuzione del codice. (Oppure potresti scrivere alcuni piccoli script di wrapper come lanciatori di applicazioni.)

Non dipende dalla variabile di ambiente CLASSPATH. È suscettibile di darti brutte sorprese, specialmente se passi da un progetto di codifica all'altro. (Certamente non dipendono da esso nell'ambiente di produzione!)

+0

Come posso disinserire la variabile classpath –

+0

Utilizzare il comando shell 'unset'. Oppure non impostare o esportarlo al primo posto –

4

Caro Pranav Chugh,

1- cmd - go the directory of located java file 

eseguire il seguente su cmd

2- javac HelloWorld.java 
3- java HelloWorld    ---- not not add .class 

qui si otterrà il risultato

0

Ho lo stesso problema solo cercando di eseguire HelloWorld su Mac 10.7.5. Ho compilato il file HelloWorld.java senza problemi con javac. Ho quindi provato a eseguire "java HelloWorld" e ho ottenuto lo stesso errore: "Impossibile trovare o caricare la classe principale"

È stato solo dopo aver modificato la directory (cd) nel Mac Terminal nella directory contenente la classe .class file che sono stato in grado di eseguire il programma.

HTH, Steve

0

io ho lo stesso problema prima. Forse hai fatto lo stesso errore. Il mio errore era usare "cd" per entrare nella directory del pacchetto piuttosto che nella directory subito sopra. Per esempio wenn directory proprio sopra sono chiamati "Ciao", è possibile eseguirlo digitando: java Ciao/HelloWorld

0

Sembra che l'impostazione CLASSPATH è sbagliato. controllare il CLASSPATH e assicurarsi che sia:

CLASSPATH="YourJavaHome/lib:." 

essere l'attenzione v'è un ':.' alla fine della frase! dopo quella corsa

source /etc/environment 

e dovrebbe essere un lavoro!

+0

dove posso trovare CLASSPATH? –

Problemi correlati