保護 JavaFX 應用
普通 Java 應用和 Spring Boot 桌面應用都可啟用 JavaFX。P4JX 的精簡執行時預設不含 JavaFX,必須在打包時顯式或經相容性建議啟用。
1. GUI 操作
-
普通 JavaFX 應用在應用型別頁選擇 Java Application;使用 Spring 容器的 JavaFX 桌面應用選擇 Spring Boot。Library Encryption 只生成保護歸檔,不能代替 JavaFX 應用打包。

-
選擇輸入 JAR、隨包 Java 版本和目標平臺,然後選擇簡單模式或高階模式。JavaFX 素材按每個目標 Java 版本和平臺分別獲取;多平臺任務會生成相互獨立的輸出包。

-
使用簡單模式時,相容性掃描如果發現
javafx.*引用或 JavaFX 依賴,會在掃描結果中說明調整原因,並自動啟用 JavaFX;如果發現javafx.scene.web,還會包含 WebView。掃描是靜態啟發式分析,進入輸出頁後仍應複核 JavaFX 摘要。 -
使用高階模式時,在 JavaFX runtime 頁籤中勾選 Bundle JavaFX into the packaged runtime,再選擇 WebView 策略:
- Auto:根據應用是否引用
javafx.scene.web自動判斷; - Include:強制包含 WebView(
fx-webkit); - Exclude:強制不包含 WebView。
普通 Java 應用的入口如下:

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

- Auto:根據應用是否引用
-
選擇輸出目錄後,確認引數摘要中 JavaFX 顯示為已內建,WebView 狀態與預期一致,再點選 Run protection。生成後使用包內啟動指令碼在每個目標平臺驗證視窗、FXML、CSS/圖片資源和 WebView。
WebView 素材約 40 MB,不使用時可選擇 Exclude 以縮小包體。高階介面中其他設定的含義見 Protector4J 高階模式設定和其 Spring Boot 設定。
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
工具根據目標 Java 訓練線和平臺,從當前區域的公開下載站點取得對應素材。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 overlay:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
FXML 相關資源、控制器簽名和框架掃描需要在目標平臺進行實際啟動測試。
5. Java 8 與 Java 11+
- Java 8 使用
jfxrt.jar/擴充套件目錄模型,生成指令碼通常不需要模組引數。 - Java 11+ 使用模組化 JavaFX JAR,生成指令碼自動設定專用 module path 和
--add-modules。
始終使用生成的 run.sh、run.command 或 run.bat,不要自行把整個 vlxjre/lib 當作 module path。
6. 自動檢測邊界
檢測器掃描應用自己的類引用,並根據依賴 JAR 檔名判斷 JavaFX。它不會深入掃描所有第三方依賴的位元組碼,以避免把可選 JavaFX 整合誤判為實際使用。
如果 JavaFX 被 shade 到一個名稱看不出 JavaFX 的依賴中,自動掃描可能漏報;此時顯式使用 --javafx。
7. 保護範圍建議
- JavaFX
Application子類、FXML Controller 和屬性模型是否保護,應以目標 Java 版本的實測結果為準。 - JNI/native 直接訪問的橋接類應保持普通類。
- 先用簡單模式或
--compat-scan,再對視窗開啟、FXML 載入、CSS/圖片資源、WebView 和平臺 native 庫進行迴歸。