2013-07-18 11 views
5

Jestem skłonny wypróbować javafx po raz pierwszy, poszedłem na stronę 01vjavafx, aby dowiedzieć się, że javafx ma teraz JDK 7u25. Zaktualizowałem wersję Java, ale nie jestem pewien, czego szukam. Podczas próby importowania i używania klasy javafx pojawiają się błędy "nie można znaleźć symbolu". Znalazłem pliki "javafx-mx.jar" "javafx-doclet.jar" "ant-javafx.jar" w katalogu% JAVA_HOME%/lib, ale o ile rozumiem, są one przeznaczone do użycia przez środowisko JRE, a nie JDK. Naprawdę chciałbym, aby nie być zależnym od jakichkolwiek wtyczek zaćmienia. Używam maven do procesu budowania. Widziałem kilka wtyczek javafx maven, ale wydaje się, że celują one w narzędzia javafx. Czy mam złe zdjęcie? Jak mogę poprawnie zaimportować te klasy?Jak mogę ustawić klasy javafx w środowisku wykonawczym?

EDIT

Teraz jestem w stanie skompilować projekt przy użyciu co znalazłem here. To sugeruje, aby dodać:

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

to rozwiązać moje problemy budować, ale nie mogę uruchomić program, Próbuję uruchomić ten prosty example, ale pojawia się ten błąd:

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) 

Any pomysły na to, jak dodać tę samą bibliotekę do środowiska wykonawczego? Używam maven-exec-plugin.

+0

możliwy duplikat [kompilacja javafx 2.0 ręcznie] (http://stackoverflow.com/questions/9436219/compile-javafx-2-0-manually) – jewelsea

+0

@jewwlsea Dzięki, ta inna odpowiedź dała mi trochę światła, jednak nie jest taki sam, jeśli chcesz go zbudować z mavenem. – amaurs

+0

Tak, zgodził się, aktualizacja nie jest już duplikatem. – jewelsea

Odpowiedz

4

tylko co jfxrt.jar zależność systemu Maven nie jest zalecane

Nie sądzę integrowania maven z JavaFX budować poprzez swoją zależność systemu do jfxrt.jar jest dobrym pomysłem.

Korzystając z tej metody, będziesz w stanie zbudować swoją aplikację (ponieważ zależność od systemu dla klas uruchomieniowych javafx pozwoli użytkownikom na ich znalezienie).

Jednak po uruchomieniu aplikacji za pomocą Java 7 nadal trzeba ręcznie dodać ścieżkę klasy do komendy java.exe, podobnej do Compile code using JavaFX 2.0 (using command line).

Nie używam wtyczki maven exec, ale zobacz add a jar to maven exec:java classpath, która zawiera instrukcje dotyczące ustawiania odpowiedniej ścieżki klasy dla tej wtyczki exec, jeśli chcesz używać tego narzędzia w ten sposób.

Korzystne podejście

Korzystnym rozwiązaniem jest odpowiednio zapakować aplikacji, stosując zalecany wdrażania funkcji (np JavaFX ant tasks, javafxpackager, javafx-maven-plugin lub javafx-gradle-plugin).

Te narzędzia osadzą niewielką klasę główną opakowania w aplikacji, która znajdzie środowisko wykonawcze JavaFX, jeśli jest dostępne, lub pomoże użytkownikowi przeprowadzić instalację przez środowisko wykonawcze, jeśli nie jest.

Ponadto, jeśli używasz Oracle Java 8, javafx znajdzie się w domyślnej ścieżce klas, więc nie musisz się martwić problemami związanymi z klasą Classpath.

+0

Celem fix-classpath w javafx-maven-plugin udało się, naprawdę chciałem uniknąć tych dodatkowych kroków, ale jest OK, myślę, że będziemy musieli poczekać na oficjalną wersję Java 1.8. – amaurs

Powiązane problemy