4 Stimmen

Ich kann JFace und SWT nicht in Eclipse verwenden, ohne ein Plugin zu erstellen

HAFTUNGSAUSSCHLUSS :

Dies ist der klassische Fall einer .NET-GUI, die versucht, sich mit JAVA zu arrangieren.

PROBLEMBESCHREIBUNG:

Ich versuche, eine sehr einfache GUI mit JFace und SWT zu bauen - der Code ist geradlinig (es gibt viele Tutorials), was es nicht so geradlinig ist, dass ich nicht scheinen kann, um JFace und SWT außerhalb eines Plugin-Projekts zu arbeiten.

Ich würde erwarten, dass ich JFace und SWT in meinem Projekt problemlos verwenden kann, da ich "C:/eclipse 3.5/plugins" in meinen CLASSPATH (von meinem Computer --> Eigenschaften --> Erweitert --> Umgebungsvariablen) und alle swt-*.dll, die ich in meinem PATH finden konnte (sowohl lokale Benutzer- als auch globale PATHs, um sicher zu sein) als dieser Artikel im Feld "Installation von SWT und JFace" an.

Das Problem ist, dass ich nichts von eclipse.org importieren kann, es sei denn, ich verweise direkt auf die Jars von Buildpath --> Bibliotheken --> externe Jars hinzufügen (damit es zu bauen, muss ich die folgenden Jars hinzufügen: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar , org.eclipse.jface_3.5.1.M20090826-0800.jar ). Sobald ich das tue, wird es gut gebaut, aber wenn ich es dann als "Java-Anwendung" ausführe, erhalte ich folgende Fehlermeldung (sollte ich LAUFEN ALS etwas anderes?):

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

Ich habe versucht, dies zu debuggen, und im Grunde wird es ausgelöst, sobald es versucht, die Instanzierung der ApplicationWindow Klasse (org.eclipse.jface.window.ApplicationWindow). Beim Versuch, den Fehler zu reproduzieren, habe ich meinen gesamten Code auskommentiert und durch den folgenden in meinem Hauptprogramm ersetzt, und es wird der gleiche Fehler wie oben in der ersten Zeile ausgegeben:

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

FRAGEN:

Frage 1 Wie kann ich den obigen Fehler beheben (ich würde gerne verstehen, was da los ist) und das verdammte Ding zum Laufen bringen?

Frage 2 Warum sind die Gläser in meinem Projekt nicht sichtbar und wie kann ich sie herstellen?

Wahrscheinlich übersehe ich etwas sehr Triviales, weil ich mich mit Java und Eclipse nicht auskenne. Jede Hilfe wird sehr geschätzt!

EDIT : Anscheinend hatte jemand anderes das gleiche Problem --> http://www.eclipsezone.com/eclipse/forums/t60528.html - Allerdings ist nicht ganz klar, wie sie das Problem gelöst haben; Hilfe ist willkommen.

11voto

Peter Štibraný Punkte 31886

IProgressMonitor Schnittstelle ist in den beiden von Ihnen verwendeten Jars nicht verfügbar. Sie müssen auch die org.eclipse.equinox.common Plugin in Ihrem Klassenpfad. IProgressMonitor kann verwendet werden, ohne dass die gesamte Eclipse-Umgebung läuft.

(Dies ist die Lösung aus dem Artikel, auf den Sie sich beziehen. Ich dachte ursprünglich, dass IProgressMonitor in org.eclipse.core.runtime plugin ist, aber es wurde nach org.eclipse.equinox.common verschoben, wie in Fehler #122935 )

6voto

Toby Punkte 9044

Wie Peter oben schon sagte, muss ich immer eine Reihe von JARs hinzufügen, um die Dinge zum Laufen zu bringen (insbesondere für JFace). Normalerweise brauche ich

./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

Sie können etwas wie jarfinder verwenden, um zu erkennen, welche Dateien in welchen JARs enthalten sind. Ich glaube mich zu erinnern, dass ich unter Windows die Suchfunktion benutzt habe, um z.B. nach folgenden Dateien zu suchen, IProgressMonitor.class in zip/jar-Dateien unter dem Eclipse-Ordner im Dateisystem - da die eigentlichen JARs manchmal schwer aufzufinden sind.

Normalerweise schaue ich, was nicht funktioniert, finde die JAR und füge sie hinzu, spüle und wiederhole.

Tun RCP/Plugins scheint wie Eclipse kümmert sich um eine Menge der Probleme für Sie, tun Sie Ihre eigenen Stand-alone-app kommt mit diesem zusätzlichen Gepäck, aber es ist wirklich schön, eine richtige Stand-alone-native suchen GUI zu haben, wenn Sie mit ihm bleiben. Also ich in der Regel Setup vanilla (non-plugin) Eclipse-Projekte und es zwingt Sie, diese Probleme zu konfrontieren (JARs in den Klassenpfad manuell hinzufügen). Es ist auch sehr nützlich, wenn Sie Ihr Projekt verteilen wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X