2009-12-23 17 views
4

AVERTISSEMENT:ne peuvent pas utiliser JFace et SWT dans Eclipse sans créer de plug-in

c'est le cas classique de GUI .NET essayant de se frayer un chemin autour des choses JAVA.

PROBLÈME DESCRIPTION:

Je suis en train de construire une interface graphique très simple avec JFace et SWT - le code est simple (il y a des tutoriels abondance), ce qu'il est pas si simple est que je ne peux pas sembler faire fonctionner JFace et SWT en dehors d'un projet de plugin.

Je m'attendrais à pouvoir utiliser JFace et SWT dans mon projet sans tracas, puisque j'ai mis "C:/eclipse 3.5/plugins" dans mon CLASSPATH (depuis mon ordinateur -> propriétés -> avancé - > variables d'environnement) et tout le swt - *. dll que je pourrais trouver dans mon PATH (à la fois l'utilisateur local et les chemins globaux, pour être sûr) comme this article indique dans le "Installation SWT et JFace" boîte. Le problème est que je ne peux pas importer quoi que ce soit d'eclipse.org à moins que je ne référence directement les jars de buildpath -> libraries -> ajouter des jars externes (pour pouvoir construire je dois ajouter les jars suivants: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar, org.eclipse.jface_3.5.1.M20090826-0800.jar). Une fois que je le fais, il se construit bien mais quand je le lance comme « Java Application » Je reçois l'erreur suivante (dois-je RUN AS quelque chose d'autre?):

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor 
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    ... 1 more 

J'ai essayé de déboguer cela et fondamentalement, il est lancé dès qu'il essaie d'instancier la classe ApplicationWindow (org.eclipse.jface.window.ApplicationWindow). Essayer de reproduire l'erreur, je commentais tout mon code et l'a remplacé par ce qui suit dans mon principal et il jette il même erreur que ci-dessus sur la première ligne:

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line 
w.setBlockOnOpen(true); 
w.open(); 
Display.getCurrent().dispose(); 

QUESTIONS:

Question 1: comment puis-je corriger l'erreur ci-dessus (je voudrais comprendre ce qui se passe) et obtenir la foutue chose à exécuter?

Question 2: pourquoi les pots ne sont pas visibles à mon projet et comment les faire? Je manque probablement quelque chose de très trivial en raison de mon manque de familiarité avec Java et Eclipse. Toute aide hautement appréciée!

EDIT: semble être quelqu'un d'autre avait le même problème ->http://www.eclipsezone.com/eclipse/forums/t60528.html - pas trop clairement comment ils ont résolu cependant, l'aide appréciée

Répondre

11

Interface IProgressMonitor n'est pas disponible dans ces deux pots que vous utilisez. Vous devez également mettre org.eclipse.equinox.common sur votre classpath. IProgressMonitor peut être utilisé sans environnement eclipse entier en cours d'exécution.

(Ceci est la solution de l'article auquel vous faites référence.J'ai d'abord pensé que IProgressMonitor est dans le plugin org.eclipse.core.runtime, mais il a été déplacé vers org.eclipse.equinox.commun comme décrit dans bug #122935)

+1

merci - J'ai réussi à comprendre cela, mais il a fallu un certain temps, comme dans cet article leur parler de fichier MANIFEST que je n'ai pas depuis que je suis sur java simple. J'ai donc ajouté une référence à org.eclipse.equinox.common et cela l'a corrigé (j'ai commencé à lancer une autre erreur sur EventManager, mais je l'ai corrigé en faisant référence à org.eclipse.core.commands). J'ai trouvé cela très confus ... Je devrais recevoir quelques avertissements si certaines des choses dont j'ai besoin pour exécuter l'application sont manquantes. – JohnIdol

+0

Il est en effet déroutant. Si vous développiez le plugin eclipse, vous obtiendriez tous les avertissements, puisque les dépendances du plugin sont écrites dans le fichier MANIFEST.MF. Si vous avez directement référencé une classe/interface manquante, vous obtiendrez également un avertissement. Mais l'utilisation de fichiers jar dans une application autonome est difficile, et vous devez rechercher les dépendances vous-même (ou utiliser quelque chose comme Ivy ou Maven). –

+0

Comment ajouter 'org.eclipse.equinox.common' à votre classpath? Pouvez-vous fournir des instructions? Où l'obtenez-vous et où l'installez-vous? – CodyBugstein

6

En écho au point de Peter ci-dessus, je dois toujours ajouter un tas de JAR pour faire fonctionner les choses (en particulier pour JFace). En général, j'ai besoin de

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar 
./org.eclipse.core.runtime_3.3.100.v20070530.jar 
./org.eclipse.equinox.common_3.3.0.v20070426.jar 
./org.eclipse.jface_3.3.1.M20070910-0800b.jar 
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar 
./org.eclipse.ui.forms_3.3.0.v20070511.jar 

Vous pouvez utiliser quelque chose comme jarfinder pour aider à repérer quels fichiers vivent dans quels JAR. Dans Windows, je me souviens de l'utilisation de la fonction de recherche, par exemple, IProgressMonitor.class dans les fichiers zip/jar sous le dossier eclipse du système de fichiers - comme parfois les fichiers JAR réels peuvent être difficiles à localiser.

Je travaille habituellement en voyant ce qui échoue, en recherchant/en ajoutant le JAR, en rinçant et en répétant. Faire RCP/plugins semble Eclipse prend en charge beaucoup de problèmes pour vous, faire votre propre application autonome est livré avec ce bagage supplémentaire, mais c'est vraiment agréable d'avoir une interface graphique native autonome si vous restez avec ça. Donc, je configure généralement des projets éclipse vanille (non plugin) et vous oblige à faire face à ces problèmes (ajouter des fichiers JAR au classpath manuellement). Il est également utile au fur et à mesure que vous voulez distribuer votre projet.

+0

A travaillé pour moi :) – CodyBugstein

+0

+1 son travail, merci – justSaid