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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top