JavaFX 1.0 發布初期,Java 呼叫 JavaFX 類別受限於編譯順序(先 javac 再 javafxc),導致 Java 端無法直接見到 JavaFX 類別。本文分析三種主流繞行方案,並呼籲官方在後續版本改善互操作設計。
NetBeans 建置流程:javac(Java)→ javafxc(JavaFX)。Java 編譯期不認識 JavaFX 類別,但 JavaFX 可引用 Java 類別。單向可見性造成互操作困難。
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByExtension("fx");
InputStreamReader reader = new InputStreamReader(
CalculatorLauncher.class.getResourceAsStream("Calculator.fx"));
engine.eval(reader);
評價:本質等同 Runtime.exec() 執行腳本,無法直接操作 JavaFX 物件,實用性低。
.class,透過 Class.forName()、Method.invoke() 動態呼叫// Java 介面
public interface JavaInterface {
Stage createStage();
}
// JavaFX 實作
public class MyStage extends JavaInterface {
public override function createStage(): Stage {
return Stage {
title: "Application"
width: 250
height: 80
scene: Scene {
content: Text { font: Font { size: 24 }, x: 10, y: 30, content: "Hello" }
}
};
}
}
// Java 調用
public class JavaMain {
public static void start(JavaInterface ji) {
Stage stage = ji.createStage();
// 進一步操作 stage
}
}
// JavaFX 啟動入口
var mys = new MyStage();
JavaMain.start(mys);
優點:型別安全、IDE 支援、程式碼清晰、符合「面向介面程式設計」
缺點:需為每個互操作點定義介面,樣板碼較多
JavaFXInterop)new、繼承、實作介面JavaFX 1.0 雖有互操作不足,但宣告式 UI 與媒體能力極強。採用「介面契約」作為當前最佳實務,靜待官方版本改善。