Java 13 + javafx + netbeans: tem como fazer funcionar?

Amigos, acho que serei bastante genérico nesse post, mas é o jeito, já que já foram tantas tentativas e erros, que não tenho como informar tudo.

Na data em que estou fazendo esse post (18/01/2020), a versão atual do java é o java 13.

Baixei o java 8 e, SÓ COM ELE, consegui fazer tudo funcionar bem (java 8 + netbeans + javafx).

Porém não podemos ficar presos a uma versão antiga, por toda a vida. Dessa forma, seguem os problemas que tive, tentando usar o trio java 13 + netbeans + javafx:

Minha intenção é tornar mais rápido o desenvolvimento dos meus projetos . Dessa forma, quero utilizar o scene builder para desenhar a parte gráfica do sistema.

Sei que os JDK’s atuais do JAVA não têm o javafx embutido e que temos que baixá-lo em separado e instala-lo à parte. Quanto a isso, tudo ok.

Porém, depois de todos os componentes instalados (sem erros na instalação), quando tento criar um projeto Java FXML, no netbeans, ocorre o seguinte erro: FAILLED TO AUTOMATICALLY SET-UP A JAVAFX PLATFORM.

Já adicionei ao projeto, as libraries jar’s do javafx (sem erros), já configurei o scene builder no netbens (sem erros) mas o netbeans não consegue criar o projeto.

Por fim, tentei o seguinte: criei um projeto java application padrão e, dentro dele, consegui criar um arquivo FXML vazio e, no arquivo .java, colei o código padrão que geralmente é criado pelo netbeans (fazendo todos os imports das bibliotecas javafx). Não ocorre nenhuma marcação de erro no código criado.

Quando dou dois cliques no arquivo FXML vazio, o scene builder é aberto (tudo ok). Consigo adicionar controles (botões, caixas de texto, etc). Consigo fazer o preview, consigo salvar. Beleza.

Quando volto para o netbeans e tento compilar o projeto, aparece o seguinte erro:
Error: JavaFX runtime components are missing, and are required to run this application
C:\Users\Alexandre Camelo\AppData\Local\NetBeans\Cache\11.2\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Alexandre Camelo\AppData\Local\NetBeans\Cache\11.2\executor-snippets\run.xml:68: Java returned: 1

Na boa, estou tentando fazer esse trio funcionar (java 13 + netbeans + javafx), há mais de 1 mês. Quanta dificuldade!

Já vi vídeos, fóruns, que falavam a esse respeito, mas, nenhum deles me deu uma solução definitiva.

Pergunta: é assim mesmo? O javafx é tão difícil assim de se configurar? A linguagem evoluiu, mas ninguém consegue usar?

Detalhe: sou novo na linguagem java e estou usando windows 10 (pode ser que isso influencie).

Agradeço, MUITO, se alguém puder me ajudar.

Conseguir consegue, mas como sao poucos que usam JavaFx no mercado, consequentemente é mais complicado encontrar tutorias 100%, comparado a outras tecnologias sem ter que recorrer a fóruns como está fazendo.

Quanto ao Java 8, é a última versão do Java mais usada pelas grandes empresas, então não se preocupe quanto a isso, Java 13 não significa nada ainda, pois as empresas não querem perder tempo com esses e outros problemas, importante são os resultados.

Ouça a opinião de quem de fato usa e sabe como funciona.
O java 13 assim como o JavaFX 13 mantem a compatibilidade daquilo que já funciona nas versões anteriores, porem tem novas coisas interessantíssimas.

Toda a sua dificuldade está centrada em querer usar o Java > que o 8 como se fosse o 8.
Não falo como a linguagem em sí mas de como funciona a modularização, eis a questão.

Não saber como uma coisa funciona não significa que ela não seja viável.
Primeiro se intere sobre o que é modularização e porque é tão importante.

Leia esse post, ele está meio grande e siga os passos e você vai conseguir fazer funcionar e entender como funciona.

Postei um pequeno exemplo zipado é somente baixar e seguir os passos.

Java a cada nova versão está com muitos recursos que valem a pena usar.

1 curtida

E tambem quero destacar, que você pode ter um projeto compilado no Java 8 por exemplo e chama-lo no Java >= 9, para isso apenas precisará setar os módulos que serão usados na chamada.

Por outro lado, pode compilar no Java >= 9 que nesse caso serão modulares.

Como resultado final, vale sempre destacar isso, seu projeto estará ainda mais seguro, menor, carregará mais rapido e usara menos memoria, isso porque você se desejar poderá gerar uma JVM tambem modular, ela terá o tamanho exato do seu projeto.

Enquanto a JVM do Java 8 usa mais 200 mega pode cair pra menos de 40 mega com a modularização dependendo do que seu projeto usará.

Isso é incrível.

Grande, j-menezes.

Obrigado pelos conselhos.

Tentarei ver o post, ao longo do dia e entender o que é a tal modularização.

Porém o que você escreveu, já me tranquilizou um pouco.

Darei um feedback, assim que conseguir ver tudo.

MUITO obrigado!

1 curtida

Já lanço uma outra pergunta, como inciante no java: JAVAFX ou SWING? O que você acha que devo adotar, com mais ênfase?

Sei que ganharei em produtividade com o JAVAFX, mas, sempre que vou ler a respeito dos dois, fico na dúvida sobre a escolha.

Sempre tenho dito a mesma coisa aqui no forum, e pra não passar a impressão que não gosto do Swing, vou te responder o de sempre.

Desenvolvi coisas otimas com o Swing, foram sistemas comerciais e muitos JavaBeans.
Swing é ótimo, não tenho mal pra fala dele, porem…, não tem mais onde melhorar.

JavaFX é ainda melhor que o Swing, porque tem Aceleração de hardware, Binds, Properties, Animações faceis de usar, Navegador Embutido com WebEngine que te permite usar JavaScript de forma natural dentro dele e tantas outras delícias,
tá muito melhor pra criar eventos, está mais rápido, mais moderno e sim recomendo sem nenhuma sombra de duvidas.

Agora é JavaFX, que roda desde PCs, Raspberry e Mobiles.

Você chegou a ver a pagina abaixo?

https://openjfx.io/openjfx-docs/#IDE-NetBeans

Ela contém instruções de como configurar o JavaFX usando o Netbeans, Eclipe, IntelliJ e linha de comando, usando Gradle, Maven ou apenas ferramentas comuns do JDK.

Acredito que seu problema esteja relacionado com o fato de que vc tem que explicitamente dizer quais módulos do JavaFX sua aplicação está usando.

Dê uma olhada no passo 4. Add JavaFX classes, ali ele mostra exatamente como corrigir o erro que vc apresentou do JavaFX runtime components are missing.

3 curtidas

Depende do seu objetivo. Se for mercado de trabalho, para desktop sem dúvidas Swing, que é muito mais usado. Se for algo por conta própria experimente cada opção e escolha o que for mais confortável. E se for mercado no geral, esquece desktop, parte pra web e mobile.

1 curtida

Cara, vou dar uma olhada nisso, sim!

Por enquanto, a solução de projeto modular do j-menezes resolveu meu problema!

Mas vou tentar, sim, verificar esse link, para ver se “curo” o netbeans desse pequeno bug.

Muito obrigado, @wldomiciano.

Cara!

Onde é que tu tava, durante todo esse tempo, em que eu passei, “batendo cabeça”, com esse problema??? :slight_smile: :slight_smile: :slight_smile:

DEU CER - TI - NHO!

Acima, o resultado da tua dica.

MUITO obrigado, j-meneses!

Agora que já sei o “caminho da roça”, vou estar por aqui, para tirar as dúvidas que surgirem durante a programação dos meus sistemas em java, pois, a partir de agora (com tudo funcionando), vou conseguir evoluir na linguagem (tava batendo muita cabeça, tentando configurar a IDE e nada de programar).

Valeu!

1 curtida

Cara…

Eu já tinha visto esse link, anteriormente. Tinha tentado usar as instruções, mas não tinha conseguido compilar, por falta de conhecimento de como “linkar” a tela construída no scene builder e os arquivos do netbeans.

Tentei, novamente, agora. Deu na mesma. Digo… As configurações todas dão certo. Crio o arquivo fxml, edito ele no scene builder, crio o arquivo controller, tudo certo. Mas não sei como fazer tudo ser compilado no netbeans.

Agora… Tem um grande detalhe, que já havia sido citado pelo j-menezes: a diferença do tamanho do projeto final é MONSTRUOSA: em ambos os casos, fiz um pequeno formulário com 01 botão, 01 label e 01 text field. Com o projeto MODULAR, tudo ficou com 132 KB. Já da forma NÃO MODULAR, o troço ficou com 8,57 MB!!!

É de se pensar, já que ambas as opções atingem o mesmo objetivo.

Brigadão, @wldomiciano !

Brigadão, @javaflex !

Só lembrando que o Java 13 não é free pra uso em produção com garantias de atualização, se tiver usando o Oracle JDK.

Não precisa usar o Java 13 da Oracle, basta usar o OpenJdk que o resultado será o mesmo, e sim tem LTS e tudo mais.
No entando java 13 ainda não é LTS e a Oracle cobra comercialmente em produção quando for LTS somente.