Защита JavaFX-приложений
JavaFX может быть включён как в обычных Java-приложениях, так и в десктопных приложениях на Spring Boot. Сокращённая среда выполнения P4JX по умолчанию не содержит JavaFX, его необходимо явно включить во время пакетирования или согласно рекомендациям по проверке совместимости.
1. Работа с GUI
-
Для обычных JavaFX-приложений на странице типа приложения выбирается Java Application; для JavaFX-десктопных приложений, использующих Spring-контейнер, — 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 МБ; при их отсутствии можно выбрать 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; или- Раскрытую файловую структуру JavaFX с
lib/в качестве корня.
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+ используются модульные JAR-файлы JavaFX; при генерации скриптов автоматически устанавливаются специальный module path и
--add-modules.
Всегда используйте сгенерированные файлы run.sh, run.command или run.bat, не используйте весь файл vlxjre/lib в качестве module path.
6. Автоматическое обнаружение границ
Детектор сканирует собственные ссылки на классы и определяет наличие JavaFX по названиям зависимых JAR-файлов. Он не сканирует в деталях байт-код всех сторонних зависимостей, чтобы избежать ошибочного распознавания необязательных компонентов JavaFX как активно используемых.
Если JavaFX скомпилирован внутрь зависимости с именем, не указывающим на его принадлежность к JavaFX, автоматический скан может пропустить его; в таком случае необходимо явно использовать --javafx.
7. Рекомендации относительно области защиты
- Необходимо убедиться, являются ли подклассы JavaFX
Application, контроллеры FXML и модели свойств защищёнными, на основе реальных результатов тестирования для конкретной версии Java. - Классы-мосты, предназначенные для прямого доступа через JNI/native, должны оставаться обычными классами.
- Сначала используйте простой режим или
--compat-scan, затем проведите тесты на восстановление функционала для открытия окон, загрузки FXML, ресурсов CSS/изображений, WebView и нативных библиотек платформы.