保護 JavaFX 應用程式
一般 Java 應用程式與 Spring Boot 桌面應用程式都可以啟用 JavaFX。P4JX 的精簡執行時預設不含 JavaFX,需要在打包時明確啟用,或由相容性掃描替你啟用。
1. GUI 操作
-
一般 JavaFX 應用程式在應用程式類型頁面選擇 Java 應用;建立在 Spring 容器上的 JavaFX 桌面應用程式則選擇 Spring Boot。類庫加密只會產生受保護歸檔,無法取代真正的 JavaFX 應用程式打包。

-
選擇輸入 JAR、隨包 Java 版本與目標平臺,然後選擇簡單模式或進階模式。JavaFX 元件會依每個目標 Java 版本與平臺分別取得,因此多平臺任務會產生彼此獨立的輸出包。

-
使用簡單模式時,相容性掃描若發現
javafx.*參考或 JavaFX 相依套件,會自動啟用 JavaFX,並在掃描結果中說明原因;若同時發現javafx.scene.web,還會一併納入 WebView。掃描屬於靜態啟發式分析,進入輸出頁後仍應核對 JavaFX 摘要。 -
使用進階模式時,在 JavaFX 執行時頁籤中勾選將 JavaFX 內建到打包執行時,再選擇 WebView 策略:
- 自動(檢測 javafx.scene.web):依應用程式是否參考
javafx.scene.web決定; - 包含:一律納入 WebView(
fx-webkit); - 排除:一律不納入 WebView。
一般 Java 應用程式的入口如下:

Spring Boot 桌面應用程式使用同名頁籤:

- 自動(檢測 javafx.scene.web):依應用程式是否參考
-
選擇輸出目錄後,確認參數摘要中 JavaFX 顯示為已內建、WebView 狀態符合預期,再點選執行保護。產生完成後,請使用包內的啟動指令碼,在每個目標平臺上驗證視窗、FXML、CSS 與圖片資源以及 WebView。
WebView 元件大約 40 MB,用不到時可以選擇排除以縮小包的體積。進階頁面中其他設定的意義,請見 Protector4J 進階模式設定。
2. 用 CLI 線上取得元件
p4j javaapp fx-app.jar dist --javafx
Spring Boot 搭配 JavaFX:
p4j springboot fx-boot.jar dist --javafx
強制納入或排除 WebView:
--javafx-webview
--no-javafx-webview
工具會依目標 JDK 訓練線與平臺,從目前區域的公開下載站臺取得對應元件。JavaFX 下載與 VLX JRE 下載都不需要把雲端儲存金鑰交給用戶端。
3. 離線元件
CLI 支援指定本機目錄:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
該目錄可以是以下兩種形式之一:
fx-core.tar.gz以及選用的fx-webkit.tar.gz;或- 已經展開、以
lib/為根的 JavaFX 檔案樹。
GUI 沒有選擇本機 JavaFX 目錄的選項,離線情境請使用 CLI。
4. FXML
如果應用程式使用 FXMLLoader,相容性掃描會建議開啟掃描器 ZIP 覆蓋層:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
FXML 資源、控制器簽章與框架掃描,都必須在目標平臺上實際啟動應用程式來驗證。
5. Java 8 與 Java 11 以上
- Java 8 使用
jfxrt.jar與擴充目錄模型,產生的指令碼通常不需要模組參數。 - Java 11 以上使用模組化的 JavaFX JAR,產生的指令碼會自動設定專用的模組路徑與
--add-modules。
請一律透過產生的 run.sh、run.command 或 run.bat 啟動,不要自行把整個 vlxjre/lib 當成模組路徑。
6. 自動偵測的判斷依據
偵測器會檢查你自己程式碼中的類別參考,以及相依 JAR 的檔案名稱。它刻意不去深入掃描每一個第三方相依套件的位元組碼,否則會把僅屬選用的 JavaFX 整合誤判為實際使用。
如果 JavaFX 被 shade 進了一個從名稱看不出來的相依套件中,自動偵測可能會漏掉,這時請明確傳入 --javafx。
7. 保護範圍建議
- JavaFX
Application子類別、FXML 控制器與屬性模型是否保護,應以目標 Java 版本上的實測結果為準。 - 由 JNI 或原生程式碼直接存取的橋接類別應維持不受保護。
- 先用簡單模式或
--compat-scan,再針對視窗建立、FXML 載入、CSS 與圖片資源、WebView 以及平臺原生函式庫做迴歸測試。