JavaFX的Getting Started,就有關於Maven、Gradle等透過構建工具的使用JavaFX的方式。不過我希望開始學習的環境簡單,我不打算一開始就引入這些構建工具,因此直接透過下載頁面下載SDK。
在下載頁面有SDK和jmods的選項,我們暫時還不會需要打包,因此不需要jmods,但也可以先下載準備,並將解壓縮的目錄先設定成環境變數
MODULE_PATH的值。
在解壓縮SDK後,將解壓縮內的lib資料夾路徑設定成環境變數SDK_PATH的值。為了方便使用,建立了一份.env檔案:
MODULE_PATH=""
SDK_PATH="<解壓縮的/lib路徑>"
CLASSPATH="${SDK_PATH}/javafx.base.jar:${SDK_PATH}/javafx.controls.jar:${SDK_PATH}/javafx.fxml.jar:${SDK_PATH}/javafx.graphics.jar:${SDK_PATH}/javafx.media.jar:${SDK_PATH}/javafx.swing.jar:${SDK_PATH}/javafx.web.jar:${SDK_PATH}/javafx-swt.jar:${SDK_PATH}/jdk.jsobject.jar:${SDK_PATH}/jfx.incubator.input.jar:${SDK_PATH}/jfx.incubator.richtext.jar:."
這樣一來就可以透過source .env配置所需的環境變數,並在使用export SDK_PATH影響後續的使用。
通常.env檔案有另外工具,可以在進入資料夾後自動套用環境變數。不過同樣為了環境簡單,並不打算引入相關工具。如果你也是使用Linux環境,可以直接將.env檔案改成
export SDK_PATH=的shell script內容,這樣在用source .env時會自動將環境變數export。
另外,傳統的java參數需要明確指定jar檔案路徑,因此我另外準備了一個CLASSPATH變數記錄所有需要的jar檔案。如果你是Windows環境,需要將分隔字符改成;,並且${SDK_PATH}也需要改成實際路徑。
使用官方提供的HelloFX做為第一支JavaFX程式。下載HelloFX.java檔案:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
編譯HelloFX.java:javac -cp "$CLASSPATH" HelloFX.java。編譯完成後會得到HelloFX.class檔案。雖然編譯過了,不過不能同樣直接指定-cp方式執行,需要改成使用--module-path方式執行: java --module-path="${SDK_PATH}" --add-modules=javafx.controls HelloFX。
其實在編譯的時候也可以使用--module-path,這比起--class-path更簡單,不需要明確指定JAR檔案路徑,因此可以直接將SDK_PATH目錄位置提供設置。不過jmods的安全使用限制更嚴苛,需要使用--add-modules明確指定需要使用到模組:javac --module-path="${SDK_PATH}" --add-modules=javafx.controls HelloFX.java。除了javafx.controls外,還有javafx.fxml、javafx.graphics也經常會使用到。並且出現警告WARNING: Use --enable-native-access=javafx.graphics to avoid a warning for callers in this module,因此最後變成的執行命令會是:
java --enable-native-access=javafx.graphics --module-path="${SDK_PATH}" --add-modules=javafx.controls,javafx.fxml,javafx.graphics HelloFX
執行成功後,會看到一個顯示 Java 與 JavaFX 版本資訊的視窗:

關閉視窗後,程式會回到終端機。能完成這個流程,就代表 JavaFX 的開發環境已經可以正常使用。下一篇將保留同一個 HelloFX 例子,改從 ABCL 載入 JavaFX,並在執行時建立相同的 JavaFX 應用程式。