2010-10-13 19 views
3

J'ai travaillé sur l'emballage d'un projet récemment, mais il est devenu un cauchemar. Alors, voici le problème en un mot. J'ai un projet que j'aimerais avoir comme fichier jar, et je l'utiliserai éventuellement comme Java Web Start. Lorsque j'essaie de générer et d'exécuter le code via Eclipse, cela fonctionne correctement. Cependant, lorsque je l'exporte en tant que "jarre runnable" et que j'essaie de l'exécuter via le terminal, j'obtiens des exceptions cryptiques qui semblent dépendre des bibliothèques référencées. J'ai vérifié que les bibliothèques sont présentes dans le fichier jar, donc ce n'est pas qu'elles sont manquantes.L'exécution échoue via java -jar alors que le même code s'exécute correctement à travers l'éclipse

Selon la façon dont je l'exporte, les spécificités de l'exception changent alors qu'il semble provenir du même problème. Vous trouverez ci-dessous la trace de pile générée lorsque le projet est exporté avec des bibliothèques dépendantes empaquetées en tant que jarres dans le fichier "principal".

Exception in thread "main" java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.ExceptionInInitializerError 
at org.eclipse.gef.tools.MarqueeSelectionTool.<init>(MarqueeSelectionTool.java:99) 
at org.gvt.MarqueeZoomTool.<init>(MarqueeZoomTool.java:16) 
at org.gvt.action.MarqueeZoomToolAction$1.<init>(MarqueeZoomToolAction.java:28) 
at org.gvt.action.MarqueeZoomToolAction.createTool(MarqueeZoomToolAction.java:28) 
at org.gvt.action.AbstractGEFToolAction.<init>(AbstractGEFToolAction.java:24) 
at org.gvt.action.MarqueeZoomToolAction.<init>(MarqueeZoomToolAction.java:20) 
at org.gvt.TopMenuBar.createBarMenu(TopMenuBar.java:113) 
at org.gvt.ChisioMain.createMenuManager(ChisioMain.java:612) 
at org.eclipse.jface.window.ApplicationWindow.addMenuBar(ApplicationWindow.java:235) 
at org.gvt.ChisioMain.main(ChisioMain.java:144) 
... 5 more 
Caused by: java.lang.IllegalArgumentException: Argument cannot be null 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.SWT.error(Unknown Source) 
at org.eclipse.swt.graphics.Resource.<init>(Unknown Source) 
at org.eclipse.swt.graphics.Cursor.<init>(Unknown Source) 
at org.eclipse.draw2d.Cursors.<clinit>(Cursors.java:170) 
... 15 more 

Soit dit en passant, j'ai sauvé la sortie XML/ANT du processus d'exportation que je pouvais lui ajouter si elle pourrait être d'intérêt. J'ai choisi de l'omettre pour moins d'encombrement.

Des idées sur ce qui pourrait être le problème ici?

EDIT: Je commence à penser si c'est un problème 32/64-bit avec la bibliothèque SWT-GTK. Quelqu'un peut-il confirmer ou infirmer cela?

+0

IIRC, Eclipse vous permet de spécifier un autre classpath que vous avez sur la ligne de commande; il se peut que certaines dépendances/bibliothèques soient manquantes dans votre fichier JAR. – Piskvor

+0

Pour autant que je sache, toutes les bibliothèques sont incluses dans le fichier jar, j'ai particulièrement vérifié le paquetage swt: swt-3.4.2-gtk-linux-x86.jar. Comme pour le chemin de classe, il n'y a rien de spécifique dans les configurations d'exécution. C'est vraiment bizarre car j'ai réussi à faire la même chose avec une version plus ancienne du même projet, et je ne me souviens pas d'avoir eu autant de problèmes avec ça. – posdef

+0

Si sur ** Windows ** essayez d'exécuter en tant que ** Administrateur ** –

Répondre

0

L'exception que vous avez ici ne concerne pas les dépendances. C'est une erreur de programmation: "quelqu'un passe un argument nul à une méthode SWT qui ne le permet pas."

Selon la trace de la pile, vous utilisez GEF Comment lancez-vous votre code dans Eclipse, comme java application ou application Eclipse

Si vous parlez de l'application Eclipse, vous ne pouvez pas simplement l'exporter en tant que Jar exécutable.Vous devrez créer un RCP. Regardez sur Google pour le tutoriel RCP, vous trouverez beaucoup intéressant

+0

Je me rends compte que le problème de l'argument null là, mais si cela avait quelque chose à voir avec ma programmation, il aurait échoué à exécuter lors de l'exécution d'Eclipse. Le code fonctionne sous Java Application btw – posdef

+0

Vous avez donc une application Java autonome utilisant SWT/Draw2d/GEF. Est ce bien ? Après avoir regardé attentivement, il semble que vous ayez une erreur lors de la création du curseur.Selon SWT: "ERROR_NULL_ARGUMENT - si le périphérique est null et qu'il n'y a pas de périphérique en cours" Draw2d créant de manière statique des curseurs SWT avec un argument null, il repose sur le fait qu'il existe un périphérique en cours. Cela signifie que le fil actuel est le fil principal je pense. –

+0

Je ne suis pas sûr à 100% que je vous suis, mais pourquoi dessiner le curseur serait-il un problème quand il s'exécute dans un terminal alors qu'il n'y a clairement aucun problème lorsque le logiciel est exécuté via eclipse? – posdef