Защита приложений JavaFX
JavaFX можно включить как в обычных приложениях Java, так и в настольных приложениях на Spring Boot. Облегчённая среда выполнения P4JX по умолчанию не содержит JavaFX: его нужно включить явно или доверить это сканированию совместимости.
1. В графическом интерфейсе
-
Для обычного приложения JavaFX выберите на странице типа приложения Java приложение. Для настольного приложения JavaFX на контейнере Spring выберите 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 МБ. Если они не нужны, выберите Исключить — пакет получится меньше. Остальные настройки расширенных страниц описаны в разделе Настройки расширенного режима Protector4J.
2. Загрузка компонентов через командную строку
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. Компоненты без подключения к сети
Командная строка принимает локальный каталог:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
Каталог может иметь один из двух видов:
fx-core.tar.gzи, по желанию,fx-webkit.tar.gz;- уже распакованное дерево файлов JavaFX с каталогом
lib/в корне.
В графическом интерфейсе выбрать локальный каталог JavaFX нельзя, поэтому без сети пользуйтесь командной строкой.
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 и новее используют модульные JAR JavaFX, и созданные сценарии сами задают отдельный путь модулей вместе с
--add-modules.
Всегда запускайте через созданные run.sh, run.command или run.bat. Не указывайте путь модулей на весь каталог vlxjre/lib самостоятельно.
6. Как работает автоматическое определение
Определение опирается на обращения к классам в вашем собственном коде и на имена файлов зависимостей JAR. Байт-код всех сторонних зависимостей намеренно не просматривается: иначе необязательные интеграции с JavaFX выглядели бы как реально используемые.
Если JavaFX встроен через shading в зависимость, по имени которой это не видно, автоматическое определение может его пропустить. В таком случае явно укажите --javafx.
7. Рекомендуемая область защиты
- Защищать ли подклассы
Applicationиз JavaFX, контроллеры FXML и модели свойств, зависит от того, как они ведут себя при проверке на вашей целевой версии Java. - Классы-мосты, к которым обращаются напрямую через JNI или нативный код, должны оставаться незащищёнными.
- Начните с простого режима или
--compat-scan, а затем проведите регрессионные проверки создания окон, загрузки FXML, ресурсов CSS и изображений, WebView и нативных библиотек платформы.