2011-03-25 14 views
26

Primo: mi rendo conto che questo problema dovrebbe essere abbastanza semplice e molte persone sembrano averlo sperimentato. Tuttavia, il mio problema potrebbe essere leggermente diverso da diverso dai post esistenti."Impossibile trovare la classe principale" quando si fa doppio clic sul file .jar

Sto utilizzando NetBeans per compilare un'applicazione Java. Quando ha finito di costruire, l'output va nella cartella dist \ correttamente. Il file jar è presente lì. Se vado alla riga di comando, passare a quella cartella, e chiamare il seguente:

java-jar Prosperity.jar

tutto funziona bene. Ovviamente il nome dell'applicazione è Prosperity. Il seguente comando funziona anche bene:

javaw-jar Prosperity.jar

Tuttavia, fare doppio clic sul file .jar dà il messaggio: "Impossibile trovare la classe principale:", e poi dà il percorso il file .jar. Ho controllato centinaia di volte che la cartella META-INF esiste all'interno del file .jar e che al suo interno esiste un MANIFEST.MF con il nome corretto della classe principale. Ho anche verificato che il file di classe principale (App.class) .class esista all'interno del file .jar.

Quindi la domanda è: qual è la differenza tra fare doppio clic su un file ed eseguire javaw su di esso? Sta diventando davvero frustrante che non funzionerà!

Grazie per qualsiasi direzione tu possa darmi, sto strappando i miei capelli qui!

+1

Sembra che in qualche modo Java ha l'idea che la mia classe principale sia effettivamente chiamata PATH per il file jar che sto usando. Non ho idea di come andrà a finire. Sembra ignorare il valore all'interno del manifest e cercare una classe principale con il nome: C: \ Users \ MyUser \ MyApp \ Prosperity.jar. Presumo che se riuscissi a capire come sta diventando il nome della classe principale che sta cercando, allora potrei risolvere il problema. – aardvarkk

risposta

24

Forse le tue associazioni di file sono incasinate. Al prompt dei comandi, provare a eseguire

ftype | find "jarfile" 

Sul mio computer a 64 bit di Windows 7, che mostra

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %* 

È inoltre possibile modificare con ftype:

ftype jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %* 
+1

Questo era il biglietto. Per ottenere davvero le cose in movimento, ho scaricato un programma chiamato unassoc il cui scopo è eliminare tutti i percorsi delle associazioni di file. Da notare anche il fatto che l'installazione dell'applicazione stava eseguendo un'installazione * silent * di JRE, che (silenziosamente, ovviamente!) * Non * associa correttamente i file .jar. Così ho dovuto cambiare l'installazione del programma principale per non fare più un'installazione silenziosa, e anche ripulire le mie associazioni di file. Dopo aver reinstallato JRE, è possibile eseguire il file .jar facendo doppio clic su di esso. Vorrei solo sapere come appariva l'associazione file quando era rotta ... – aardvarkk

+0

Felice di vederti funzionare. Assumerei che l'associazione sbagliata mancasse del parametro '-jar'. Ciò causerebbe l'errore che hai menzionato. –

+1

Basato su "Sembra che in qualche modo Java stia prendendo l'idea che la mia classe principale sia in realtà chiamata PATH" Penso che quello che è successo è che% 1 non aveva citazioni attorno a loro e che il barattolo si trovava in un percorso che includeva uno spazio . – Fredrik

0

Ho appena avuto lo stesso identico problema, risolto allo stesso modo. Ho dovuto eliminare completamente l'associazione, non solo la personalizzazione dell'utente, e reinstallare JRE.

L'associazione prima che la correzione è stata ancora:

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %* 

E dopo (lo stesso):

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %* 
+3

scusate, che doveva essere un commento – James

9

Appena trovato questo post ...

Se avete solo il problema quando si fa doppio clic sul file jar e non sul lancio di cmd, è probabilmente perché la versione di JRE è errata (6 al posto di 7).

basta cambiare il valore nel regedit a:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jarfile\shell\open\command] "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

a:

"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*

Non ci dovrebbe essere alcun problema se questo valore viene aggiornato.


Nota: La commutazione tra i 32 e 64 bit su Windows:

->"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* userà la versione a 64 bit di JRE ->"C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %* utilizzerà la versione a 32 bit di JRE

+1

Lo stesso. In alternativa è possibile utilizzare il comando 'ftype' dalla risposta approvata (con un nuovo percorso). –

+0

Questo davvero aiutato. Grazie. – CodeBlue

0

Se i metodi di cui sopra non possono risolvere il problema, provare a eliminare il tipo di file .jar dal tuo pc (puoi google un software chiamato Unassoc.exe ed eliminare il tipo di file), e quindi il problema è risolto! (Almeno, questo è il mio caso!)

1

Cerca il tuo regedit e verificare seguire voce

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command] 
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\"" 


[HKEY_CLASSES_ROOT\jarfile\shell\open\command] 
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\"" 


[HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\shell\open\command] 
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\"" 
1

mi sono imbattuto in questo errore pure. Ho controllato l'associazione di file usando il prompt dei comandi e tutto era corretto. Non è stato fino a quando ho provato a eseguire il .jar dalla riga di comando utilizzando java -jar MyProgram.jar che effettivamente mi ha mostrato la radice del problema.

si scopre il .jar è stato compilato sotto JDK 7 mentre io stavo solo facendo funzionare JRE 6. Questo è stato l'errore dato a me nel prompt, che mi portano alla vera soluzione:

Exception in thread "main" java.lang.UnsupportedClassVersionError: MyProgram/Program : Unsupported major.minor version 51.0 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$000(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: MyProgram.Program. Program will ex 
it. 
Problemi correlati