Proteção de aplicativos JavaFX
O JavaFX pode ser habilitado tanto em aplicativos Java comuns quanto em aplicativos desktop Spring Boot. O runtime simplificado do P4JX não inclui JavaFX por padrão e deve ser ativado explicitamente durante a compilação ou por meio de recomendações de compatibilidade.
1. Operações GUI
-
Para aplicativos JavaFX comuns, selecione Java Application na página de tipo de aplicativo; para aplicativos desktop JavaFX que utilizam o container Spring, selecione Spring Boot. Library Encryption gera apenas um arquivo de proteção e não pode substituir a compilação de um aplicativo JavaFX.

-
Selecione o JAR de entrada, Versão Java incluída no pacote e a plataforma de destino, e escolha entre o modo simples ou o modo avançado. Os recursos do JavaFX são obtidos separadamente para cada versão e plataforma Java alvo; tarefas multiplataforma geram pacotes de saída independentes.

-
No modo simples, se a varredura de compatibilidade encontrar referências a
javafx.*ou dependências do JavaFX, explicará os motivos das alterações no resultado da varredura e ativará automaticamente o JavaFX; sejavafx.scene.webfor detectado, também será incluído o WebView. A varredura é uma análise heurística estática, portanto, é necessário verificar novamente o resumo do JavaFX na página de saída. -
No modo avançado, marque Bundle JavaFX into the packaged runtime na aba JavaFX runtime e, em seguida, escolha a estratégia para o WebView:
- Auto: É determinado automaticamente com base em se o aplicativo faz referência a
javafx.scene.web. - Include: Inclusão obrigatória do WebView (
fx-webkit); - Exclude: Exclusão obrigatória do WebView.
O ponto de entrada para aplicações Java comuns é o seguinte:

Aplicações desktop Spring Boot utilizam a aba com o mesmo nome:

- Auto: É determinado automaticamente com base em se o aplicativo faz referência a
-
Após selecionar o diretório de saída, confirme que JavaFX aparece como já integrado no resumo dos parâmetros e que o status do WebView está de acordo com o esperado; em seguida, clique em Run protection. Após a geração, use os scripts de inicialização contidos no pacote para verificar janelas, recursos FXML, CSS/imagens e o WebView em cada plataforma-alvo.
Os materiais do WebView ocupam aproximadamente 40 MB; caso não sejam utilizados, é possível escolher Exclude para reduzir o tamanho do pacote. As significados das outras configurações na interface avançada podem ser encontrados em Configurações do modo avançado do Protector4J e Configuração do Spring Boot.
2. Obtenção online via CLI
p4j javaapp fx-app.jar dist --javafx
Spring Boot JavaFX:
p4j springboot fx-boot.jar dist --javafx
Inclusão ou exclusão obrigatória do WebView:
--javafx-webview
--no-javafx-webview
A ferramenta obtém os materiais correspondentes dos sites de download públicos da região atual, de acordo com a linha de treinamento Java e a plataforma alvo. Nem o download do JavaFX nem o download do VLX JRE exigem que a chave de armazenamento em nuvem seja entregue ao cliente.
3. Materiais offline
O CLI suporta diretórios locais:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
O diretório pode conter:
fx-core.tar.gze o opcionalfx-webkit.tar.gz; ou- Uma estrutura de arquivos JavaFX expandida, com
lib/como raiz.
A GUI não oferece opção de seleção de diretório JavaFX local; use o CLI para cenários offline.
4. FXML
Se o aplicativo usar FXMLLoader, a verificação de compatibilidade sugerirá ativar o scanner ZIP overlay:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
Os recursos relacionados a FXML, a assinatura dos controladores e a varredura do framework precisam passar por testes de inicialização reais na plataforma-alvo.
5. Java 8 e Java 11+
- O Java 8 utiliza o modelo de diretório
jfxrt.jar/extension, e a geração de scripts geralmente não requer parâmetros de módulo. - O Java 11+ utiliza JARs modularizados do JavaFX; a geração de scripts define automaticamente um path de módulo específico e o
--add-modules.
Sempre utilize os arquivos run.sh, run.command ou run.bat gerados, e não use o vlxjre/lib inteiro como path de módulo por conta própria.
6. Detecção automática de limites
O detector escaneia suas próprias referências a classes e identifica o JavaFX com base nos nomes dos arquivos JAR de dependência. Ele não realiza uma varredura aprofundada no bytecode de todas as dependências de terceiros, a fim de evitar que integrações opcionais do JavaFX sejam identificadas erroneamente como sendo usadas efetivamente.
Se o JavaFX for incluído em uma dependência cujo nome não indica sua presença, a varredura automática pode falhar em detectá-lo; nesse caso, utilize explicitamente o --javafx.
7. Recomendações para o escopo de proteção
- A determinação se subclasses do JavaFX
Application, controladores FXML e modelos de propriedades devem ser protegidos deve seguir os resultados de testes na versão específica do Java alvo. - As classes de ponte para acesso direto via JNI/native devem permanecer como classes comuns.
- Primeiro, use o modo simples ou o
--compat-scan, e depois realize testes de regressão para a abertura de janelas, carregamento de FXML, recursos CSS/imagens, WebView e bibliotecas nativas da plataforma.