JavaFX-Anwendungen schützen
JavaFX lässt sich sowohl für gewöhnliche Java-Anwendungen als auch für Spring-Boot-Desktop-Anwendungen aktivieren. Die schlanke P4JX-Runtime enthält JavaFX standardmäßig nicht; Sie müssen es ausdrücklich aktivieren oder den Kompatibilitätsscan das übernehmen lassen.
1. Vorgehen in der GUI
-
Wählen Sie für eine reine JavaFX-Anwendung auf der Seite „Anwendungstyp“ die Option Java-Anwendung. Für eine JavaFX-Desktop-Anwendung auf Basis eines Spring-Containers wählen Sie Spring Boot. Die Bibliotheksverschlüsselung erzeugt nur ein geschütztes Archiv und ersetzt keine echte JavaFX-Paketierung.

-
Wählen Sie das Eingabe-JAR, die mitgelieferte Java-Version und die Zielplattformen und entscheiden Sie sich für den einfachen oder den erweiterten Modus. Die JavaFX-Komponenten werden je Ziel-Java-Version und Plattform getrennt bezogen, daher entsteht bei mehreren Plattformen jeweils ein eigenes Ausgabepaket.

-
Findet der Kompatibilitätsscan im einfachen Modus
javafx.*-Referenzen oder JavaFX-Abhängigkeiten, aktiviert er JavaFX automatisch und begründet dies im Scanergebnis. Wird zusätzlichjavafx.scene.webgefunden, kommt auch WebView hinzu. Der Scan ist eine statische heuristische Analyse — prüfen Sie die JavaFX-Zusammenfassung auf der Ausgabeseite noch einmal. -
Aktivieren Sie im erweiterten Modus auf dem Reiter JavaFX-Runtime die Option JavaFX in die paketierte Runtime aufnehmen und wählen Sie dann die WebView-Strategie:
- Automatisch (javafx.scene.web erkennen): Entscheidet danach, ob die Anwendung
javafx.scene.webreferenziert. - Einbeziehen: WebView (
fx-webkit) immer aufnehmen. - Ausschließen: WebView nie aufnehmen.
Bei einer gewöhnlichen Java-Anwendung sieht der Reiter so aus:

Spring-Boot-Desktop-Anwendungen nutzen einen gleichnamigen Reiter:

- Automatisch (javafx.scene.web erkennen): Entscheidet danach, ob die Anwendung
-
Prüfen Sie nach der Wahl des Ausgabeverzeichnisses, ob die Zusammenfassung JavaFX als eingebunden ausweist und der WebView-Status Ihren Erwartungen entspricht, und klicken Sie dann auf Schutz ausführen. Prüfen Sie das fertige Paket anschließend mit dem enthaltenen Startskript auf jeder Zielplattform: Fenster, FXML, CSS- und Bildressourcen sowie WebView.
Die WebView-Komponenten belegen rund 40 MB. Wählen Sie Ausschließen, wenn Sie sie nicht benötigen, um das Paket kleiner zu halten. Die übrigen Einstellungen der erweiterten Seiten beschreibt Protector4J Erweiterte Moduseinstellungen.
2. Komponenten über die CLI beziehen
p4j javaapp fx-app.jar dist --javafx
Für Spring Boot mit JavaFX:
p4j springboot fx-boot.jar dist --javafx
WebView erzwingen oder ausschließen:
--javafx-webview
--no-javafx-webview
Das Werkzeug lädt die passenden Komponenten je nach Ziel-JDK-Linie und Plattform von der öffentlichen Download-Seite Ihrer Region. Weder der JavaFX- noch der VLX-JRE-Download erfordert, dem Client einen Cloud-Storage-Schlüssel zu übergeben.
3. Komponenten offline bereitstellen
Die CLI akzeptiert ein lokales Verzeichnis:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
Das Verzeichnis kann eine dieser beiden Formen haben:
fx-core.tar.gzund optionalfx-webkit.tar.gz;- ein entpackter JavaFX-Baum mit
lib/als Wurzel.
Die GUI bietet keine Auswahl eines lokalen JavaFX-Verzeichnisses; nutzen Sie im Offline-Fall die CLI.
4. FXML
Verwendet die Anwendung FXMLLoader, empfiehlt der Kompatibilitätsscan, das Scanner-ZIP-Overlay zu aktivieren:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
FXML-Ressourcen, Controller-Signaturen und Framework-Scans müssen Sie prüfen, indem Sie die Anwendung auf der Zielplattform tatsächlich starten.
5. Java 8 gegenüber Java 11 und neuer
- Java 8 nutzt
jfxrt.jarund das Modell der Erweiterungsverzeichnisse; die erzeugten Skripte benötigen in der Regel keine Moduloptionen. - Java 11 und neuer nutzen modularisierte JavaFX-JARs; die erzeugten Skripte setzen einen eigenen Modulpfad zusammen mit
--add-modules.
Starten Sie immer über das erzeugte run.sh, run.command oder run.bat. Richten Sie den Modulpfad nicht selbst auf das gesamte vlxjre/lib.
6. Wie die automatische Erkennung entscheidet
Die Erkennung betrachtet die Klassenreferenzen in Ihrem eigenen Code sowie die Dateinamen der Abhängigkeits-JARs. Sie durchsucht bewusst nicht den Bytecode jeder Abhängigkeit von Dritten — das würde optionale JavaFX-Integrationen so melden, als wären sie tatsächlich in Gebrauch.
Ist JavaFX in eine Abhängigkeit hineingeshadet, deren Name keinen Hinweis darauf gibt, kann die automatische Erkennung es übersehen. Geben Sie dann --javafx ausdrücklich an.
7. Empfohlener Schutzumfang
- Ob Sie JavaFX-
Application-Unterklassen, FXML-Controller und Property-Modelle schützen, hängt davon ab, wie sie sich in Tests mit Ihrer Ziel-Java-Version verhalten. - Brückenklassen, die über JNI oder nativen Code direkt angesprochen werden, bleiben ungeschützt.
- Beginnen Sie mit dem einfachen Modus oder
--compat-scanund führen Sie anschließend Regressionstests für Fensteraufbau, FXML-Laden, CSS- und Bildressourcen, WebView und plattformnative Bibliotheken durch.