Je reçois une exception "no class definition found" en essayant d'exécuter mon application sous Windows (elle fonctionne bien sous OS X). Les classes dont se plaint la JVM sont mes classes (pas de jar tiers requis). Lorsque je décompresse les fichiers dans le fichier jar, tous les fichiers sont présents, y compris ceux sur lesquels JVMm se plaint.NoClassDefFoundError en cours d'exécution à partir de jar
Le pot est créé en utilisant 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écompresse le fichier jar et exécute le fichier jar du répertoire dans lequel j'ai décompressé la classe, tout fonctionne correctement. Donc, je suppose que tous les fichiers requis sont à l'intérieur du pot.
EDIT: com.hamza.driver.ui
est une classe dans un package appelé com.hamza.driver
qui a main
. Après la construction, j'obtiens un pot "app.jar", et je le lance en utilisant "java -jar app.jar", qui s'exécute correctement sous OS X, mais pas sous Windows.
Si je décompresse app.jar
dans un répertoire séparé et exécute "java -jar app.jar", il excute bien.
EDIT 2: exception:
Exception in thread "main" java.lang.NoClassDefFoundError: com/hamza/gui/tr ansfer/ClipboardTransferHandle at com.hamza.driver.ui.main(Unknown Source) Caused by: java.lang.ClassNotFoundException: com.hamza.gui.transfer.Clipboa rdTransferHandle 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 1 more
ClipboardTransferHandle Les fichiers sont présents dans le pot.
EDIT 3: les importations pour la classe carte clip:
import java.util.logging.Logger; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.Toolkit; import java.io.IOException;
Tout en jouant avec elle, je trouve que si j'essaie de déclarer ClipboardTransferHandle
comme une variable statique dans le pilote, cela fonctionne, mais chaque objet n'est pas statique n'est pas trouvé. Tous les éléments principaux de l'interface graphique sont des variables statiques, donc l'interface graphique est construite, mais les autres éléments ne le sont pas; tout ce qui est créé n'est pas statique, mais si je les déclare statiques pour les tests, ils fonctionnent.
Vous pouvez essayer sans l'attribut Class-Path, et vérifiez si vous reproduisez le problème. – VonC
Afficher la commande d'invocation exacte - comme "java -jar my.jar". Si possible, lien vers le pot en question. –
Quelles sont les importations dans la classe com.hamza.gui.tr ansfer.ClipboardTransferHandle? –