2013-07-18 32 views
5

Tôi sẵn sàng thử javafx lần đầu tiên, tôi đã truy cập vào trang web javafx Oracle để tìm javafx giờ đây đi kèm với JDK 7u25. Tôi cập nhật phiên bản java của tôi nhưng tôi không chắc chắn những gì tôi đang tìm kiếm. Tôi nhận được "không thể tìm thấy biểu tượng" lỗi bất cứ khi nào tôi cố gắng nhập khẩu và sử dụng một lớp javafx. Tôi đã tìm thấy các tệp "javafx-mx.jar" "javafx-doclet.jar" "ant-javafx.jar" trong% JAVA_HOME%/lib nhưng theo như tôi hiểu, chúng có nghĩa là được sử dụng bởi JRE chứ không phải JDK. Tôi thực sự muốn không phụ thuộc vào bất kỳ plugin eclipse nào. Tôi sử dụng maven cho quá trình xây dựng. Tôi đã thấy một vài plugin javafx maven, nhưng chúng dường như nhắm vào các công cụ javafx. Tôi có nhận được hình ảnh sai không? Làm cách nào để tôi nhập các lớp đó một cách chính xác?Làm cách nào để có được các lớp javafx vào thời gian chạy?

EDIT

Bây giờ tôi có thể lập dự án sử dụng những gì tôi thấy here. Nó gợi ý thêm:

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

này giải quyết các vấn đề xây dựng của tôi, nhưng tôi không thể chạy chương trình, tôi đang cố gắng để chạy đơn giản example này, nhưng tôi nhận được lỗi này:

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) 

Bất kỳ ý tưởng về cách thêm cùng một thư viện vào thời gian chạy? Tôi đang sử dụng maven-exec-plugin.

+0

bản sao có thể có của [biên dịch javafx 2.0 theo cách thủ công] (http://stackoverflow.com/questions/9436219/compile-javafx-2-0-manually) – jewelsea

+0

@jewwlsea Cảm ơn, câu trả lời khác đã cho tôi một số ánh sáng, tuy nhiên nó không giống nhau nếu bạn muốn xây nó với maven. – amaurs

+0

Đúng, đã đồng ý, với bản cập nhật, nó không còn là bản sao nữa. – jewelsea

Trả lời

4

Chỉ cần làm jfxrt.jar một sự phụ thuộc hệ thống maven không được khuyến khích

Tôi không nghĩ rằng việc tích hợp maven với JavaFX của bạn xây dựng thông qua một sự phụ thuộc hệ thống để jfxrt.jar là một ý tưởng tốt.

Sử dụng phương pháp đó, bạn sẽ có thể xây dựng ứng dụng của bạn (vì phụ thuộc hệ thống cho các lớp thời gian chạy javafx sẽ cho phép maven tìm thấy chúng).

Nhưng khi bạn chạy ứng dụng của mình với Java 7, bạn vẫn cần phải thêm đường dẫn lớp theo cách thủ công vào lệnh java.exe của bạn, tương tự như Compile code using JavaFX 2.0 (using command line).

Tôi không sử dụng plugin exec maven, nhưng xem add a jar to maven exec:java classpath, cung cấp hướng dẫn về cách đặt đường dẫn lớp thích hợp cho plugin exec đó nếu bạn muốn sử dụng công cụ theo cách này.

phương pháp ưa thích

Phương pháp ưa thích là để đóng gói đúng cách ứng dụng của bạn sử dụng một công cụ triển khai đề xuất (ví dụ JavaFX ant tasks, javafxpackager, javafx-maven-plugin hoặc javafx-gradle-plugin).

Những công cụ này sẽ nhúng một lớp chính bao bọc nhỏ trong jar ứng dụng của bạn, sẽ tìm thấy thời gian chạy JavaFX nếu nó có sẵn hoặc giúp hướng dẫn người dùng thông qua cài đặt thời gian chạy nếu không.

Ngoài ra, nếu bạn sử dụng Oracle Java 8, javafx sẽ ở trên classpath mặc định của bạn để bạn không cần phải lo lắng về các vấn đề liên quan đến classpath.

+0

Mục tiêu sửa lỗi classpath trong javafx-maven-plugin đã thực hiện thủ thuật, tôi thực sự muốn tránh các bước bổ sung này nhưng không sao, tôi đoán chúng ta sẽ phải chờ bản phát hành chính thức của Java 1.8. – amaurs

Các vấn đề liên quan