2020年3月14日 星期六

OpenJFX 11(JavaFX 11)的Eclipse開發環境建置


1.      OracleJdk.java.net網站下載JDK 11 RI參考實作版本。(只有64位元版本)

2.      Gluon的網站下載JavaFX 11
Gluon公司對JavaFX的技術貢獻一直不遺餘力,除了開發許多自製的好用FX元件(像是ControlsFX)之外,也把JavaFX平台擴展至嵌入式應用與手提裝置(iOS/Android),而且當初Oracle不再維護SceneBuilder軟體,也是Gluon把它接下來繼續維護與更新。甚至把OpenJFX移至github去也是Gluon協助完成的。
JDK 9開始,Oracle開始把Java的程式碼模組化。現在Oracle已經把JavaFX完全開源,並且把JavaFXJDK中獨立出來,除了有助於讓JavaFX的開發得力於更多技術社群,JDK本身也不必在整合JDKJavaFX上費心力,可加快本身版本的更新,可以說對雙方都是好事。
JavaFX 11GluonJavaFX的第一個長期支持版本。


3.      上述兩個步驟完成之後,會有兩個下載的檔案,一個是OpenJDK,一個是OpenJFX

分別將兩個下載的壓縮檔解開。
openjdk-11+28_windows-x64_bin.zip解開後得到jdk-11資料夾,這是JDK 11的主目錄。我把它放在C槽的Program Files\Java下。

openjfx-11.0.2_windows-x64_bin-sdk.zip解開後得到javafx-sdk-11.0.2資料夾,其中有3個子資料夾,分別是binlegallib。我一樣把解壓縮出來的資料夾,放在C槽的Program Files\Java下。


4.      開啟Eclipse,設定其使用的Java開發環境是jdk-11


5.      建立一個User Libraries,我將其取名作FX_11_0_2,並將剛才javafx-sdk-11.0.2資料夾中lib子資料夾中的所有jar檔案以Add External JARs方式導入。



6.      建立一個Java Project,我將其取名HelloFx11,該專案我們以jdk-11的執行環境建置,按下Finish後,會跳出視窗詢問是否建立新的模組資訊,我們選擇不建立。



7.      建立好的專案,我們為其導入JavaFX 11Libraries,也就是步驟5中所建立的FX_11_0_2 Libraries(因為JDK 11開始,已經不再內建JavaFX,所以這步驟沒做,我們將無法使用JavaFX的程式庫),完成之後,在Project Explorer處的HelloFx11專案,應該要看見引用了FX_11_0_2的程式庫。



8.      HelloFx11專案,建立一個Package,然後建立一個類別,我將其取名Hello,並鍵入程式碼如下:
package org.test;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class Hello extends Application {
     public static void main(String[] args) {
         launch(args);
     }
     @Override
     public void start(Stage primaryStage) throws Exception {
         Label label = new Label("Hello World");
         HBox hbox = new HBox(label);
         Scene scene = new Scene(hbox);
         primaryStage.setScene(scene);
         primaryStage.show();
     }
}

9.      執行Hello類別,Run As -> Java Application。我們會發現系統拋出錯誤,無法執行。


10.  用到其它功能模組的專案,我們執行時要另外指定模組名稱。
針對我們這個JavaFX的專案Hello,我們使用到了JavaFX的元件,所以要加入JavaFX元件模組。做法是:
我們選擇Run Configuration,在跳出的視窗,Java Application處選中了我們的專案Hello,然後在左邊區塊的Arguments分頁中,在VM arguments處,我們加入以下文字:
--add-modules=javafx.controls


11.  執行成功,出現視窗。


12.  如果我們的JavaFX專案,使用的是從FXML來制定畫面,這樣我們在執行時,也許要指定FXML模組引用,在VM arguments處,需要加入類似這樣的文字:
--add-modules=javafx.controls,javafx.fxml

13.  事實上,在執行Java程式的時候,如果不是使用IDE,我們還需要完整的指定出使用的模組的路徑以及模組名稱,以我們的這個範例程式來說,我們需要指定如下:
java --module-path %JavaFX SDK資料夾中的lib路徑% --add-modules javafx.controls Hello
當然,進行編譯時也是要指定出完整的模組路徑和模組名稱,才能完成編譯:
javac --module-path % JavaFX SDK資料夾中的lib路徑% --add-modules javafx.controls HelloFX.java
我們在Eclipse中不需要指定出模組路徑是因為我們在專案的設定上,已經告訴Eclipse我們使用到我們自訂的使用者Libraries,而這些Libraries的路徑我們已經設定指到了JavaFX SDK資料夾中的lib的這些jars檔案,所以不必再指定出來。