web-dev-qa-db-fra.com

"Impossible de trouver la classe principale" lors d'un double-clic sur un fichier .jar

Premièrement: je me rends compte que ce problème devrait être assez simple et que beaucoup de gens semblent l’avoir vécu. Cependant, il semble que mon problème soit légèrement différent des messages existants.

J'utilise NetBeans pour compiler une application Java. Une fois la construction terminée, la sortie est correctement placée dans le dossier dist \. Le fichier jar y est présent. Si je vais à la ligne de commande, accédez à ce dossier et appelez le numéro suivant:

Java -jar Prosperity.jar

tout fonctionne bien. De toute évidence, le nom de l'application est la prospérité. La commande suivante fonctionne aussi très bien:

javaw -jar Prosperity.jar

Cependant, un double-clic sur le fichier .jar donne le message: "Impossible de trouver la classe principale:", puis donne le chemin d'accès au fichier .jar. J'ai vérifié cent fois que le dossier META-INF existe dans le fichier .jar et qu'il contient un fichier MANIFEST.MF portant le nom de classe principal correct. J'ai également vérifié que le fichier .class de la classe principale (App.class) existe dans le fichier .jar.

La question est donc la suivante: quelle est la différence entre un double-clic sur un fichier et l’exécution de javaw dessus? Cela devient vraiment frustrant de ne pas courir!

Merci pour toute direction que vous pouvez me donner, je me déchire les cheveux ici!

29
aardvarkk

Peut-être que vos associations de fichiers se sont égarées. A l'invite de commande, essayez de lancer

ftype | find "jarfile"

Sur mon ordinateur Windows 7 64 bits, cela indique

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

Vous pouvez aussi le changer avec ftype:

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

Je viens de trouver ce post ...

Si vous ne rencontrez le problème que lorsque vous double-cliquez sur le fichier jar et non au lancement de cmd, c'est probablement parce que la version du JRE est incorrecte (6 au lieu de 7).

Il suffit de changer la valeur dans regedit à:

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

à :

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

Il ne devrait y avoir aucun problème si cette valeur est mise à jour.


Remarque: Basculement entre les versions 32 et 64 bits sous Windows:

-> "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* utilisera la version 64 bits du JRE -> "C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %* utilisera la version 32 bits du JRE

11
tatactic

rechercher votre regedit et vérifier l'élément suivant

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
byby

Je suis tombé sur cette erreur aussi. J'ai vérifié l'association de fichier à l'aide de la commande Invite et tout était correct. Ce n’est que lorsque j’ai essayé d’exécuter le fichier .jar à partir de la ligne de commande en utilisant Java -jar MyProgram.jar qu’il m’a montré la source du problème.

Il s’avère que le fichier .jar a été compilé sous JDK 7 alors que je n’utilisais que JRE 6. C’était une erreur qui m’avait été donnée dans l’invite qui m’avait conduit à la vraie solution:

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.
1
Adam

Je viens d'avoir exactement le même problème, corrigé de la même manière. J'ai dû supprimer complètement l'association, pas seulement la personnalisation de l'utilisateur, et réinstaller le JRE.

L'association avant le correctif était toujours:

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

Et après (le même):

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

Si les méthodes ci-dessus ne permettent pas de résoudre le problème, essayez de supprimer le type de fichier .jar de votre ordinateur (vous pouvez rechercher un logiciel appelé Unassoc.exe sur Google et supprimer le type de fichier). (Du moins c'est mon cas!)

0
tomato