NoClassDefFoundError lors de l'exécution de jar
Je suis un "pas de définition de classe trouvée" exception lors de l'exécution de mon application sur Windows (il tourne très bien sur OS X). Les classes de la JVM est de se plaindre à propos de mes classes (pas de tiers pots nécessaire). Quand j'ai décompresser les fichiers à l'intérieur du pot, tous les fichiers sont présents, y compris ceux de la JVMm est de se plaindre.
Le pot est créé à l'aide de la tâche suivante:
<target name="jar" depends="">
<jar destfile="build/app.jar" >
<manifest>
<attribute name="Built-By" value="hamza"/>
<attribute name="Main-Class" value="com.hamza.driver.ui"/>
<attribute name="Class-Path" value="./"/>
</manifest>
<fileset dir="build">
<include name="**/*.class"/>
<include name="**/*.png"/>
<include name="**/*.xpi"/>
<include name="**/*.html"/>
<exclude name="**/*.jar"/>
</fileset>
</jar>
Je ne peux pas comprendre ce qui est à l'origine du problème. Si je décompressez le bocal et exécuter le pot de l'annuaire j'ai décompressé la classe, tout fonctionne bien. Donc, je suis en supposant que tous les fichiers requis sont dans le pot.
EDIT: com.hamza.driver.ui
est une classe dans un package appelé com.hamza.driver
qui a main
.
Après la compilation, j'obtiens un bocal "app.jar" et je l'exécute à l'aide de "java-jar app.jar" qui exécute bien sur OS X, mais pas sur Windows.
Si je décompresser app.jar
dans un autre répertoire et exécutez la commande "java-jar app.jar" il excutes amende.
EDIT 2: exception:
Exception in thread "main" java.lang.NoClassDefFoundError: com/hamza/gui/tr ansfer/ClipboardTransferHandle au com.hamza.le pilote.l'interface utilisateur.principale(Source Inconnue) Causés par: java.lang.ClassNotFoundException: com.hamza.l'interface graphique.de transfert.Clipboa rdTransferHandle à java.net.URLClassLoader$1.run(Unknown Source) à java.de sécurité.AccessController.doPrivileged(Native method) à java.net.URLClassLoader.findClass(Source Inconnue) à java.lang.Chargeur de classe.loadClass(Source Inconnue) au coucher du soleil.misc.Lanceur$AppClassLoader.loadClass(Source Inconnue) à java.lang.Chargeur de classe.loadClass(Source Inconnue) à java.lang.Chargeur de classe.loadClassInternal(Source Inconnue) ... 1 de plus
ClipboardTransferHandle .les fichiers de classe sont présents dans le pot.
EDIT 3: importations pour le clip de conseil de classe:
importer java.util.la journalisation.Enregistreur; importer java.awt.datatransfer.Presse-papiers; importer java.awt.datatransfer.ClipboardOwner; importer java.awt.datatransfer.Transférables; importer java.awt.datatransfer.StringSelection; importer java.awt.datatransfer.DataFlavor; importer java.awt.datatransfer.UnsupportedFlavorException; importer java.awt.Boîte à outils; importer java.io.IOException;
Tout en jouant avec lui, j'ai trouvé que si j'essaie de déclarer ClipboardTransferHandle
comme une variable statique dans le pilote, il fonctionne, mais chaque objet qui n'est pas statique n'est pas trouvé.
Tous les principaux éléments d'interface sont variables statiques, de sorte que le GUI est construit, mais d'autres éléments ne sont pas; tout ce qui est créé pas statique provoque NoClassDefFound
, mais si je les déclare statique pour les tests, ils travaillent.
Montrer exacte de l'invocation de la commande "java-jar my.jar". Si possible, un lien vers le pot en question.
Quelles sont les importations dans l'com.hamza.gui.tr ansfer.ClipboardTransferHandle classe?
OriginalL'auteur Hamza Yerlikaya | 2009-09-14
Vous devez vous connecter pour publier un commentaire.
C'est le problème qui est survenu,
si le fichier JAR a été chargé de "C:\java\apps\appli.jar" et votre fichier de manifeste a la Class-Path: référence "lib/other.jar", le chargeur de classes sont en "C:\java\apps\lib\" pour "other.jar". Il ne regarde pas le fichier JAR entrée "lib/other.jar".
Solution:-
ouvrez le terminal,donner le bon chemin vers votre bocal et l'exécuter à l'aide de cette commande java-jar abc.jar
Maintenant ce qui va arriver, c'est le chargeur de classe va le chercher dans le dossier approprié pour le référencés POTS depuis maintenant ils sont présents dans le même dossier qui contient votre application JAR..Il n'y a pas de "java.lang.NoClassDefFoundError" exception levée maintenant.
Cela a fonctionné pour moi... j'Espère que ça fonctionne, vous aussi!!!
OriginalL'auteur Gautam Mandsorwale
Quelle classe est-il absent? Votre Principal attribut de Classe ressemble un peu suspect-est com.hamza.le pilote.l'interface utilisateur d'une classe ou d'un colis?
OriginalL'auteur Dominic Cooney
Il y a une chance, que l'NoClassDefFoundError (je déteste vraiment cette erreur - toujours me rend fou...) n'est pas levée, car il ne trouve pas la classe qu'il vous dit (-> votre classe), mais parce que java ne peut pas trouver l'une des classes qui sont utilisées pour instancier cette classe.
J'ai eu ce problème une fois, quand une classe importé d'une autre classe d'un autre pot (dans mon cas: un bundle OSGi) qui n'avait pas été correctement exporté. Bien que ce fut un OSGi problème - Vous pouvez avoir les mêmes problèmes dans votre environnement. Peut-être que votre application dépend de certaines classes qui sont présents dans votre système d'exploitation (OS X mais pas dans la Fenêtre de l'environnement. Je ne cherche pas à des tiers les bibliothèques, mais à la implémentations Java lui-même.
Bonne chance!
Modifier
Il y a deux plus tout à fait la même question, avec, malheureusement, pas de solution, mais peut-être l'une des indications de plus il peut vous aider dans votre cas:
NoClassDefFound lors de l'exécution d'un pot
NoClassDefFoundError à l'intérieur de pot
Edit 2
Voici un semblable problème que a accepté de répondre. Espérons que cela aide:
NoClassDefFoundError en essayant d'exécuter mon pot avec java.exe -jar...quel est le problème?
Ah OK, il n'a pas lu assez attentivement.
Veux juste que vous sachiez que, 7 ans plus tard, tu m'as sauvé de beaucoup (plus) de la frustration, de grâce!
OriginalL'auteur Andreas_D
Avez-vous spécifié la nouvelle jar dans le classpath (java -cp .;new.jar MainClass.class)?
OriginalL'auteur bwobbones