(RESOLVIDO) JAVAFX +JDK 13 +Gradle na Intellij Community 2019.3

Olá! Alguém pode explicar de forma clara, passo-a-passo de como importar o sdk do javaFX em um projeto java+gradle com JDK 13 na Intellij. A unica maneira que consegui até agora foi adicionando o arquivo C:\Program Files (x86)\Java\jre1.8.0_241\lib\ext\jfxrt.jar do JRE 1.8 ao classpath do jdk no projeto mas quero usar a versão mais recente do JAVAFX e aparentemente não se distribue mais o JRE separado do JDK e não encontrei esse aquivo dentro do JDK 13 pra importar. Agradeço a ajuda

Quando vc trabalha com Gradle vc não precisa importar nada manualmente.

No build.gradle basta vc adicionar o plugin do JavaFX e as dependencias necessárias e o Gradle se encarrega de baixar e configurar pra vc.

Aqui tem um exemplo de como deveria ficar seu build.gradle.

E na pagina abaixo fala um pouco mais do processo:

https://openjfx.io/openjfx-docs/#gradle

Assim ficou o meu build.gradle

plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
 }

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8


repositories {
    mavenCentral()    
}

javafx {
version = "13"
modules = [ 'javafx.graphics','javafx.fxml','javafx.controls' ]
   }

mainClassName = 'base.Main'

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}

Só que agora recebo um erro ao tentar rodar o projeto:
Error: JavaFX runtime components are missing, and are required to run this application

De acordo com o site do openJfx, pra resolver esse problema devo importar o modulo javafx.graphics


Warning: If you run now the project it will compile but you will get this error:

Error: JavaFX runtime components are missing, and are required to run this application

This error is shown since the Java 13 launcher checks if the main class extends javafx.application.Application. If that is the case, it is required to have the javafx.graphics module on the module-path.


Adicionei o modulo mas não resolveu. Algum palpite?

Consigo contornar esse problema criando uma class Main padrão que chama uma outra classe Main2 que herda de Application pra iniciar o app mais não me parece o melhor jeito de resolver e também não tstei a fundo pra ver se ta tudo funcional mesmo.

Não sei o que pode ser, eu literalmente segui o tutorial que mostrei e tudo funcionou como magica.

Eu até criei um repositório com 2 projetos, um com Gradle e outro com Maven. Eu planejo escrever um passo a passo pro meu blog em algum momento.

Tenta olhar meu projeto, ver oque está diferente do seu e ver se alguma coisa muda. O link é esse: https://github.com/wldomiciano/javafx-com-gradle-e-maven/tree/master/MeuIncrivelAppGradle

Eu sugiro que vc copie meu projeto e tente executar pra ver se tudo corre bem. Se tudo der certo com o meu projeto, sugiro que vc o use como base para o seu, adicione no meu as classes do seu só pra testar.

Se ainda assim não funcionar, vc poderia compactar seu projeto e me mandar pra eu testar aqui? Também me diga seu sistema operacinal e a versão do Gradle que está usando.

1 curtida

Fiz download do seu projeto, executei e recebi o mesmo erro. então fui dar mais uma olhada no site do OpenJfx e de lá fui no repo deles e baixei o projeto de amostra, rodei e funcionou. Procurei as divergências no projeto e a única que achei foi o JDK11 usado no projeto do OpenJfx. (O JDK 11 na minha máquina veio com a IDE intellij 2019.3) Troquei pro 13 (que baixaei direto do site do oracle) pra testar e me deu o mesmo erro. Fui no seu projeto e setei o JDK pra 11 e funcionou perfeitamente.
Suponho que haja algo errado com o JDK que eu baixei. Cheguei a formatar o PC de ontem pra hoje pra ver se não tava tendo algum conflito ou erro de sistema… Vou tentar baixar o JDK 13 a partir de uma outra fonte pra ver se a coisa anda.

A propóstio ao rodar seu projeto na GUI foi exibido o seguinte: Hello, JavaFX 10.0.2-internal, running on Java 11.0.5. mesmo tendo a versao 13 declarada no build.gradle

javafx {
  version = '13'
   modules = [ 'javafx.controls' ]
 }

como faço pra atualizar?

Pior que no meu aparece a versão certinha quando mudo de 13 pra 11 e vice-versa, olha:

Aí eu realmente não sei. Eu tentaria apagar o cache o Gradle ou algo assim.

Finalmente depois de muito suor consegui criar um projeto com JavaFX e gradle.

Precisei corrigir duas coisas:

O JAVA_HOME estava apontando pata a pasta bin (C:\jdk13\bin) dentro do jdk e nao para a raiz (C:\jdk13\) como deve ser.

Mesmo usando gradle, precisei adicionar as vm options indo em Run->Edit Configurations... e no campo VM Options: inserindo --module-path D:\SDKS\javafx-sdk-13.0.2\lib --add-modules javafx.controls,javafx.fxml onde D:\SDKS\javafx-sdk-13.0.2\lib é o caminho pra minha pasta do JavaFX

Eis aqui meu build.gradle

plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
}


repositories {
mavenCentral()
}


javafx {
version = "13"
modules = ['javafx.controls', 'javafx.fxml']
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}

na GUI vejo Hello, JavaFX 13.0.2, running on Java 13.0.2. quando executo o app.

Vlw pela força @wldomiciano

3 curtidas

Obrigado por postar a solução.