Arquivo .jar não funciona no javafx-sdk-13.0.1

74 respostas
A

Olá, sou novo no mundo da programação e estou desenvolvendo uma aplicação em JavaFX 13, o JavaFX não vem mais com as novas versões do JDK e tive que baixar a parte e configurar o NetBeans e funcionou perfeito, o problema é que quando gera o arquivo .jar não funciona e o seguinte erro:
“Error: JavaFX runtime components are missing, and are required to run this application”

Alguma ajuda?

74 Respostas

darlan_machado

Tenta isso

A

estou usando o Netbeans.

A

Pesquisei e não tem nada referente a esse erro com o NetBeans.

j-menezes

Tá faltando na chamada os modules do JavaFX.

Basta coloca-los.

A

Boa tarde, poderia me indicar um passo-a-passo?

A

Boa tarde, consegui add as chamadas dos módulos e está funcionando via terminal com o comando “java -jar --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml Arquivo.jar”, gostaria de criar um atalho, mas não estou conseguindo

j-menezes

Pode coloca-lo dentro de um arquivo de lote.
Ou ainda criar usando o JLink, ele gera um arquivo de lote com uma JVM reduzida de acordo com o projeto, mas tambem pode no Jar criar um manifest colocando os modules.
nesse caso, instala um jdk normal e se desejar pode tirar as fontes da JVM.

Pelo NetBeans ou Eclipse tá simples gerar modularizado, no NetBeans procure por jlink no seu projeto.

Tem a opção tambem de usar o https://openwebstart.com/, sim, porque a Oracle descontinuou o Java Web Start, por causa que não existem mais plugins Java nos navegadores e ela não disponibiliza mais JRE como em versões mais antigas.

Mas o povo Open já deu um jeito.

O melhor dos mundos com a modularização seria a possibilidade do novo JPackage tools gerar nativos cruzados, mas quando se fala em nativos cruzados em Java, estamos falando
em nativos que levam junto uma JVM otimizada do projeto e nela tem toda a segurança e portabilidade do Java.

Isso significa estando no Linux por exemplo, se conseguiria gerar nativo para Linux, Windows, Mac, Solaris e por ai vai.

Pelo que o Kevin disse, no Java 14 ainda não será cruzado, mas já ví do povo do open source a possibilidade de usar os jmods e gerar cruzado.

Bom, vamos ver né.

A

Bom dia, estou pesquisando sobre o jlink, mas ainda não encontrei um artigo bom que explique bem sobre.

j-menezes

Bom dia.

https://docs.oracle.com/javase/9/tools/jlink.htm#JSWOR-GUID-CECAC52B-CFEE-46CB-8166-F17A8E9280E9

Você está usando NetBeans ?

A

Isso, estou usando o NetBeans.

A

Não consigo entender esse launcher do jlink.

j-menezes

É o seguinte :

Estando no Netbeans e depois de criar um projeto modular que usar jdk >= 9.

1.Botão direito mouse sobre o nome do projeto
2.Properties
3.Packaging
3.1 - Marcar Create JLink Distribution
4.Botão direito mouse sobre o nome do projeto
4.1 - Clean and Build

  1. Agora procura dentro da pasta do seu projeto o diretorio
    dist/jlink
    entra na pasta com o nome do seu Projeto
    Vai aparecer com alguma coisa desse tipo

drwxrwxr-x 2 jorge jorge 4096 jan 3 19:15 bin
drwxrwxr-x 4 jorge jorge 4096 jan 3 19:15 conf
drwxrwxr-x 3 jorge jorge 4096 jan 3 19:15 include
drwxrwxr-x 14 jorge jorge 4096 jan 3 19:15 legal
drwxrwxr-x 6 jorge jorge 4096 jan 3 19:15 lib
drwxrwxr-x 3 jorge jorge 4096 jan 3 19:15 man
-rw-rw-r-- 1 jorge jorge 664 jan 3 19:15 release

vá dentro do diretorio bin e veja que lá tem a chamada do programa e tambem a jvm modularizada;

A

Agradeço a ajuda, mas nada funcionou.:pensive:

j-menezes

Amanhã se o bom Deus permitir e você desejar, posso te orientar melhor.

A

Sim, aceito a ajuda.

A

Fiz tudo como orientado, mas não funcionou, gerou as pastas até com linha de comando, mas o --launcher da erro de que não contém uma classe main.

A

Oque pode estar errado?

jlink --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml --launcher start=comprasbr/ComprasBR.Main --output PATH_TO_OUTPUT

Error: java.lang.IllegalArgumentException: comprasbr does not have main class: ComprasBR.Main

j-menezes
  1. No NetBeans você já fez o projeto usando o JavaFX rodou ?
    Se não funcionou segue aqui um exemplo simples é só baixar o modularFXSimples.zip
    [RESOLVIDO].Jar baixado do site da Gluon, não abre!

  2. Por hora, esqueça de usar o JLink manualmente, faça tudo pelo NetBeans, conforme expliquei acima.

A

Bom dia, baixei o seu projeto de teste e tb não funcionou.

j-menezes

Como assim não funcionou ?
Que erro deu ?

A

Não mostra erro, apenas não executa.

j-menezes

Você deu um Clean and Build ?

A

Sim.

j-menezes

Apareceu erro de compilação ?

A

Não.

j-menezes

Pode dar um clean and Build novamente e postar a tela da Output ?

A

Deu um alerta agora.

A

j-menezes

Você tem que clicar em cima do nome TelaFXML e mandar Rodar.

A

Já fiz isso.

j-menezes

Qual a versão do seu ubuntu ?

A

Ubuntu 18.04

j-menezes

Caracas, tá tudo igual o meu aqui.
Até meu NetBeans é a mesma versão do que vc tá usando.

A

Pois é.:confused:

j-menezes

Você está rodando o NetBeans como Root ou não ?

A

O meu programa roda na IDE e na linha de comando, mas gostaria de um atalho para que o usuário apenas de duplo click para abrir.

j-menezes

Esse seu projeto que tá rodando na linha de comando usa qual versão do java ?

A

java 13.

j-menezes

Mas pelo desenho da sua tela que postou a impressão é que o projeto que aparece no NetBeans foi feito pra rodar no Java 8 ou inferior.

A

Tem 2 versões do mesmo, uma com jdk8 e outra com 13.

A

A versão que roda no jdk8 fiz um script e criei um atalho na área de trabalho aí roda apenas com duplo click, mas a versão que roda no jdk13 roda apenas na linha de comando, tentei criar um script mas não roda com duplo click, e esse mesmo script rosa na linha de comando.

j-menezes

Como está esse script ?

A

#! /bin/sh

cd /path…
java -jar ComprasBR.jar

Esse é do jdk 8. funciona perfeito.

A

#! /bin/bash

cd /path…

java -jar --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml ComprasBR_JDK-13.jar

Esse é do jdk13, mas funciona apenas na linha de comando do terminal.

j-menezes

Esse java que voce tá chamando, você está indo no path onde está o jdk 13 mesmo ?
caso contrario ele vai chamar o jdk que está em seu ambiente.
experimenta colocar o caminho correto do java 13

A

Esta inda para a pasta correta.

A

*indo

j-menezes

Bom, mas mesmo estando na pasta correta, teria que chamar
./java e não java simplesmente, porque assim ele pegara o java do ambiente e não do diretorio

A

./java tb não roda.

j-menezes

Sim, de não esta rodando é uma coisa, mas a chamada tem que estar correta.
Faz um teste
do diretorio em questao
digita
java -version
e depois
./java -version

e tira isso a limpo

A

“java -verison” está com o 13
“./java /version” ./java: Arquivo ou diretório inexistente

j-menezes

então o java 13 e’ o java do seu ambiente, correto ?

A

Sim.

j-menezes

Isso tá mais parecendo um interrogatorio (rs)
mas qual java 13 ? da Oracle, open enfim ?

A

“Isso tá mais parecendo um interrogatorio (rs)” rss

A

testei nos 2, no open e no oracle.
O resultado é o mesmo.

j-menezes

O exemplo que mandei pra você tem que rodar.
Mas vamos testar no NetBeans a geração do JLink
Pra isso no projeto TesteSimples --> Properties --> Packaging --> Create JLink distribution (marca) e Create Launcher (marca) e Launcher name TesteSimples

A

Fiz exatamente isso, é gerado uma pasta com um executável, mas ao clicar nada acontece.

j-menezes

Pensei que você fosse novato. mas vejo que tem certa experiencia, isso é bom.
Vamos lá então, entra no diretorio que foi gerado o jlink do projeto TesteSimples

A

Sou novato, tenho apenas 2 meses de estágio.:slightly_smiling_face:

A

Estou no diretório.

j-menezes

Voce está usando o terminal ?

A

Terminal e desktop.

j-menezes

nesse caso precisa estar no terminal, pode ser o grafico mesmo dentro do ambiente normal do ubuntu.
entra no diretorio bin e chama
./TesteSimples
devera aparecer uns erros

A

Uma lista de erros.

j-menezes

pra checar o java otimizado que o jlink gerou
./java -version

A

./java -version
openjdk version “13.0.1” 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode)

j-menezes

Tá vendo esse é a JVM modularizada e não aquela do seu ambiente.
Bom !! preciso dar uma pausa agora, somente mais tarde posso continuar

A

Ok, muito obrigado pela ajuda.

j-menezes

Continuando…

j-menezes

Agora entra no diretorio lib
Isso é pra ver o que o jlink gerou e serve pra voce distribuir a aplicação de forma nativa se desejar.
O conteudo nesse diretorio permite gerar .deb .rpm ou mesmo um zip ou outro formato linux,

Se tiver em outro SO o formato será dele.

Copie javafx-sdk-13.0.1/lib/*.so para o diretorio lib/

Agora volta pro bin e pronto deverá rodar

./TesteSimples

j-menezes

Se você deseja colocar o Launch da aplicação por que não usa a Área de Trabalho e cria um
arquivo de extensão desktop ?

A

Não gerou TesteSimples.

A

Já tentei e tb não funcionou.

Criado 9 de janeiro de 2020
Ultima resposta 14 de jan. de 2020
Respostas 74
Participantes 3