Non è possibile utilizzare JFace e SWT in Eclipse senza creare plug-in
Domanda
DISCLAIMER:
questo è il classico caso della GUI .NET che cerca di aggirare le cose JAVA.
DESCRIZIONE DEL PROBLEMA:
Sto cercando di creare una GUI molto semplice con JFace e SWT: il codice è semplice (ci sono molti tutorial), ciò che non è così semplice è che non riesco a far funzionare JFace e SWT al di fuori di un progetto di plug-in.
Mi aspetterei di poter utilizzare JFace e SWT nel mio progetto senza problemi, dal momento che ho inserito "C:/eclipse 3.5/plugins" nel mio CLASSPATH (dal mio computer --> proprietà --> avanzato --> variabili di ambiente) e tutto il swt-*.dll che ho trovato nel mio PATH (sia utente locale che globale, per essere sicuri) come Questo articolo indica nella casella "Installazione di SWT e JFace".
Il problema è che non posso importare nulla da eclipse.org a meno che non faccia riferimento direttamente ai jar da buildpath --> librerie --> aggiungo jar esterni (per poterlo compilare devo aggiungere i seguenti jar: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar, org.eclipse.jface_3.5.1.M20090826-0800.jar).Una volta fatto questo, si costruisce bene ma poi quando lo eseguo come "Applicazione Java" ricevo il seguente errore (dovrei CORRERE COME qualcos'altro?):
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
Ho provato a eseguire il debug di questo e fondamentalmente viene lanciato non appena tenta di istanziare il file ApplicationWindow
classe (org.eclipse.jface.window.ApplicationWindow).Cercando di riprodurre l'errore, ho commentato tutto il mio codice e l'ho sostituito con il seguente nel mio main e genera lo stesso errore di cui sopra sulla prima riga:
ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
DOMANDE:
Domanda 1:come posso correggere l'errore di cui sopra (mi piacerebbe capire cosa sta succedendo) e far funzionare quella dannata cosa?
Domanda 2:perchè i vasetti non sono visibili nel mio progetto e come realizzarli?
Probabilmente mi sto perdendo qualcosa di molto banale a causa della mia mancanza di familiarità con Java ed Eclipse.Qualsiasi aiuto è molto apprezzato!
MODIFICARE:sembra che qualcun altro abbia avuto lo stesso problema --> http://www.eclipsezone.com/eclipse/forums/t60528.html - Non è però troppo chiaro come abbiano risolto il problema, l'assistenza è apprezzata
Soluzione
IProgressMonitor
l'interfaccia non è disponibile nei due jar che usi.Devi anche mettere org.eclipse.equinox.common plugin sul tuo classpath. IProgressMonitor
può essere utilizzato senza che l'intero ambiente Eclipse sia in esecuzione.
(Questa è la soluzione dell'articolo a cui fai riferimento.Inizialmente pensavo che IProgressMonitor fosse nel plugin org.eclipse.core.runtime, ma è stato spostato in org.eclipse.equinox.common come descritto in errore n. 122935)
Altri suggerimenti
Facendo eco al punto di Peter sopra, devo sempre aggiungere un sacco di JAR per far funzionare le cose (specialmente per JFace).In genere, avrò bisogno
./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
Puoi usare qualcosa come jarfinder per individuare quali file risiedono in quali JAR.In Windows mi sembra di ricordare di aver utilizzato la funzione di ricerca per cercare, ad esempio, IProgressMonitor.class
nei file zip/jar nella cartella Eclipse sul file system, poiché a volte i JAR effettivi possono essere difficili da rintracciare.
Di solito lavoro vedendo cosa fallisce, rintracciando / aggiungendo il JAR, risciacquando e ripetendo.
Fare RCP/plugin sembra che Eclipse si prenda cura di molti dei problemi per te, fare la tua app autonoma viene fornito con questo bagaglio extra ma è davvero bello avere una GUI dall'aspetto nativo autonomo se ci si attiene.Quindi in genere configuro progetti Eclipse vanilla (non plug-in) e ti costringe ad affrontare questi problemi (aggiungere manualmente JAR al classpath).È utile anche come e quando vuoi distribuire il tuo progetto.