web-dev-qa-db-fra.com

Erreur .jar - impossible de trouver ou de charger la classe principale

J'ai essayé de mettre HelloWorld dans un fichier .jar et de l'exécuter, mais cela ne fonctionne pas. J'ai créé le fichier Java et saisi le programme, puis écrit dans cmd:

javac HelloWorld.Java
java HelloWorld

et cela a fonctionné. Puis je suis entré

echo Main-Class: HelloWorld >manifest.txt
jar cvfm HelloWorld.jar manifest.txt HelloWorld.class

et a obtenu la sortie

added manifest
adding: HelloWorld.class(in = 426) (out= 288)(deflated 32%)

Je suis ensuite entré

Java -jar HelloWorld.jar
HelloWorld.jar

et la première ligne a fonctionné, tandis que la deuxième ligne m'a donné une erreur:

Error: Could not find or load main class path\HelloWorld.jar

qui est le même résultat que j'ai obtenu (dans une fenêtre qui se ferme rapidement) lorsque j'ai essayé de l'ouvrir avec le fichier Java.exe en jre7\bin 64 bits, jdk1.7.0_51\bin, jdk1.7.0_51\jre\bin, ainsi que jre7\bin 32 bits. J'ai désinstallé et réinstallé mes fichiers jre et jdk et recréé mes fichiers .class et .jar, mais le problème persiste. Je suis sur win8.

Edit: J'ai essayé de faire comme l'a suggéré Aetheria, mais pas de chance. Je mets HelloWorld.Java dans chemin\com\stackoverflow\user\blrp, le compile et cela fonctionne en entrant

Java com.stackoverflow.user.blrp.HelloWorld

dans le chemin. J'ai ensuite créé le manifeste et le bocal en:

(echo Manifest-Version: 1.0
echo Class-Path: .
echo Main-Class: com.stackoverflow.user.blrp.HelloWorld) >manifest.txt
jar cvfm HelloWorld.jar manifest.txt com\stackoverflow\user\blrp\HelloWorld.class

et a obtenu la sortie

added manifest
adding: com/stackoverflow/user/blrp/HelloWorld.class(in = 454) (out= 312)(deflat
ed 31%)

mais toujours, Java -jar HelloWorld.jar a fonctionné et HelloWorld.jar pas (même erreur). J'ai aussi essayé de ne pas faire le paquet, juste le Class-Path du manifeste, même résultat .

(En outre, j'ai résolu le problème avant de poser la question en utilisant un fichier .bat, mais il serait toujours agréable de faire fonctionner ce bocal.)

25
Blrp

Merci jbaliuka pour la suggestion. J'ai ouvert l'éditeur de registre (en tapant regedit dans cmd) et en allant à HKEY_CLASSES_ROOT> jarfile> Shell> ouvrir>, puis en ouvrant (Par défaut) et en modifiant la valeur

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

à

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

(Je viens de retirer le fichier javaw.exe.) Ensuite, vous devez cliquer avec le bouton droit de la souris sur un fichier jar -> ouvrir avec -> choisir le programme par défaut -> naviguer dans votre dossier Java et ouvrir\jre7\bin\Java. exe (ou tout autre fichier Java.exe dans votre dossier Java). Si cela ne fonctionne pas, essayez de passer à javaw.exe, ouvrez un fichier jar avec, puis revenez en arrière.

Je ne connais rien à la modification du registre, sauf que c'est dangereux. Vous voudrez peut-être le sauvegarder avant de le faire (dans la barre supérieure, Fichier> Exporter).

12
Blrp

J'ai trouvé cette question lorsque je cherchais la réponse à la question ci-dessus. Mais dans mon cas, le problème était l’utilisation d’un "tiret" plutôt que d’un "tiret". Vérifiez quel tiret vous utilisez, il pourrait être le mauvais. J'espère que cette réponse accélère les recherches de quelqu'un d'autre, un commentaire comme celui-ci aurait pu me faire gagner un peu de temps.

8
EuroTech

Vous pouvez toujours exécuter ceci:

Java -cp HelloWorld.jar HelloWorld

-cp HelloWorld.jar ajoute le fichier jar au chemin de classe, puis HelloWorld exécute la classe que vous avez écrite.

Pour créer un fichier jar exécutable avec une classe principale sans package, ajoutez Class-Path: . au manifeste:

Manifest-Version: 1.0
Class-Path: .
Main-Class: HelloWorld

Je conseillerais d'utiliser un package pour donner à votre classe son propre espace de noms. Par exemple.

package com.stackoverflow.user.blrp;

public class HelloWorld {
    ...
}
8
ᴇʟᴇvᴀтᴇ

Si ce problème ne pouvait pas trouver la réponse, j’ai donc cherché d’autres sujets, j’ai découvert que je faisais mon application avec 1,8, mais pour une raison quelconque, mon jre était obsolète même si je me souviens de l’avoir mise à jour. J'ai téléchargé le dernier jre 8 et le fichier jar fonctionne parfaitement. J'espère que cela t'aides.

1
wintoch

J'ai rencontré le même problème lors de l'installation d'une configuration à l'aide d'un fichier jar. La solution qui a fonctionné pour moi est

  1. ouvrir la commande Invite en tant qu'administrateur
  2. Accédez au répertoire jdk bin (Ex.C:\Program Files\Java\jdk1.8.0_73\bin).
  3. maintenant exécuter Java -jar <<jar fully qualified path>>

Cela a fonctionné pour moi :)

0
MoHaN K RaJ