2013-07-18 2 views
5

Sono disposto a provare javafx per la prima volta, sono passato al sito javafx Oracle per scoprire che javafx ora viene fornito con JDK 7u25. Ho aggiornato la mia versione di Java ma non sono sicuro di cosa sto cercando. Ottengo errori "non riesco a trovare il simbolo" ogni volta che cerco di importare e utilizzare una classe javafx. Ho trovato i file "javafx-mx.jar" "javafx-doclet.jar" "ant-javafx.jar" in% JAVA_HOME%/lib ma per quanto ho capito, quelli sono pensati per essere usati da JRE, non dal JDK. Mi piacerebbe davvero non dipendere da alcun plugin di eclipse. Io uso Maven per il processo di compilazione. Ho visto un paio di plugin Maven javafx, ma sembrano avere come target gli strumenti javafx. Sto ottenendo l'immagine sbagliata? Come posso ottenere che le classi vengano importate correttamente?Come posso ottenere le classi javafx in runtime?

EDIT

Ora sono in grado di compilare il progetto con quello che ho trovato here. Si consiglia di aggiungere:

<dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>javafx</artifactId> 
    <version>2.2</version> 
    <scope>system</scope> 
    <systemPath>${java.home}/lib/jfxrt.jar</systemPath> 
</dependency> 

Ciò ha risolto i miei problemi di compilazione, ma non è possibile eseguire il programma, che sto cercando di eseguire questo semplice example, ma ottengo questo errore:

java.lang.NoClassDefFoundError: javafx/application/Application 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.ClassNotFoundException: javafx.application.Application 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Qualsiasi idee su come aggiungere la stessa libreria al runtime? Sto usando maven-exec-plugin.

+0

possibile duplicato di [compilare manualmente javafx 2.0] (http://stackoverflow.com/questions/9436219/compile-javafx-2-0-manual) – jewelsea

+0

@jewwlsea Grazie, l'altra risposta mi ha dato un po 'di luce, tuttavia non è lo stesso se vuoi costruirlo con Maven. – amaurs

+0

Sì, d'accordo, con l'aggiornamento non è più un duplicato. – jewelsea

risposta

4

Basta fare jfxrt.jar una dipendenza del sistema Maven non è raccomandato

Non credo che l'integrazione Maven con il JavaFX costruire tramite una dipendenza sistema per jfxrt.jar è una buona idea.

Utilizzando tale metodo sarà possibile creare l'applicazione (poiché la dipendenza del sistema per le classi di runtime javafx consentirà a Maven di trovarli).

Ma quando si esegue l'applicazione con Java 7, sarà comunque necessario aggiungere manualmente il classpath al comando java.exe, simile a Compile code using JavaFX 2.0 (using command line).

Non utilizzo il plug-in maven exec, ma vedere add a jar to maven exec:java classpath, che fornisce istruzioni sull'impostazione del classpath appropriato per quel plug-in exec, se si desidera utilizzare lo strumento in questo modo.

approccio Preferred

L'approccio preferito è confezionare correttamente l'applicazione utilizzando uno strumento di distribuzione consigliata (per esempio JavaFX ant tasks, javafxpackager, javafx-maven-plugin o javafx-gradle-plugin).

Questi strumenti incorporeranno una classe principale del wrapper piccolo nel jar dell'applicazione che troverà il runtime JavaFX se disponibile o aiuterà a guidare gli utenti attraverso un'installazione runtime, se non lo è.

Inoltre, se si utilizza Oracle Java 8, javafx si troverà sul percorso di classe predefinito, quindi non sarà necessario preoccuparsi dei problemi relativi al percorso classe.

+0

L'obiettivo fixpath classpath in javafx-maven-plugin ha fatto il trucco, volevo davvero evitare questi passaggi extra ma è ok, suppongo che dovremo aspettare la versione ufficiale di Java 1.8. – amaurs