JavaFX e OpenJDK

Eu estou tentando decidir se eu poderia mudar para o JavaFX para a interface do usuário do meu aplicativo Java. A maioria dos meus usuários estaria usando o Oracle JRE, que tem JavaFX integrado nos dias de hoje. No entanto, alguns estão usando o OpenJDK (no linux). Essa (velha) pergunta sugere que o OpenJDK lida muito mal com o JavaFX. De acordo com essa pergunta, a alternativa OpenJFX só será totalmente integrada ao OpenJDK na versão 9. Então, minha pergunta é dupla:

  • O suporte a JavaFX no OpenJDK ainda é tão ruim?
  • Em caso afirmativo, existem distribuições Linux que já oferecem um pacote OpenJFX para que os usuários não precisem construí-lo ?

JavaFX faz parte do OpenJDK

O projeto JavaFX em si é open source e faz parte do projeto OpenJDK .

Construindo o JavaFX a partir do repository do OpenJDK

Você pode construir uma versão aberta do OpenJDK (incluindo o JavaFX) completamente a partir do código-fonte que não possui dependencies no Oracle JDK ou código-fonte fechado.

Atualização: Usando uma distribuição JavaFX pré-compilada a partir de fonts OpenJDK

Como observado nos comentários a esta questão e em outra resposta, as distribuições Debian Linux oferecem uma distribuição binária do JavaFX baseada no OpenJDK:

Diferenças entre o Open JDK e o Oracle JDK em relação ao JavaFX

As informações a seguir foram fornecidas para o Java 8. A partir do Java 9, a codificação do VP6 foi preterida para o JavaFX e a tecnologia de implantação de aplicativos incorporados do Oracle WebStart / Browser também foi descontinuada . Portanto, futuras versões do JavaFX, mesmo que sejam distribuídas pela Oracle, provavelmente não includeão nenhuma tecnologia que não seja de código aberto.

O Oracle JDK inclui algum software que não é utilizável no OpenJDK. Existem dois componentes principais relacionados ao JavaFX.

  1. O codec de vídeo ON2 VP6, que é de propriedade do Google e do Google, não tem código aberto.
  2. A tecnologia de implantação de aplicativos do Oracle WebStart / Browser Embedded.

Isso significa que uma versão aberta do JavaFX não pode reproduzir arquivos VP6 FLV. Isso não é uma grande perda, pois é difícil encontrar codificadores VP6 ou mídia codificados no VP6.

Outros formatos de vídeo mais comuns, como o H.264, serão reproduzidos com uma versão aberta do JavaFX (contanto que você tenha os codecs apropriados pré-instalados na máquina de destino).

A falta de tecnologia de implantação do WebStart / Browser Embedded é realmente algo a ver com o OpenJDK em si, em vez do JavaFX especificamente. Essa tecnologia pode ser usada para implantar aplicativos não-JavaFX.

Seria ótimo se a comunidade OpenSource desenvolvesse uma tecnologia de implantação para Java (e outros softwares) que substituísse completamente os methods de implantação do WebStart e do Browser Embedded, permitindo uma experiência de usuário leve, leve e de baixo impacto para distribuição de aplicativos. Acredito que alguns projetos começaram a atender a essa meta, mas ainda não alcançaram um nível de maturidade e adoção elevado.

Pessoalmente, sinto que as implantações do WebStart / Browser Embedded são legadas e existem atualmente maneiras melhores de implantar muitos aplicativos JavaFX (como aplicativos autocontidos).

Quem precisa criar distribuições Linux OpenJDK que incluem JavaFX

Cabe às pessoas que criam pacotes para distribuições Linux baseadas no OpenJDK (por exemplo, Redhat, Ubuntu, etc.) para criar RPMs para o JDK e JRE que incluem o JavaFX. Esses distribuidores de software, então, precisam colocar os pacotes gerados em seus repositorys de código de distribuição padrão (por exemplo, repositorys yum da rede fedora / red hat). Atualmente, isso não está sendo feito, mas ficaria bastante surpreso se os pacotes Linux 8 do Java não incluíssem o JavaFX quando o Java 8 fosse lançado em março de 2014.

Conselhos sobre a implantação de aplicativos substanciais

Eu aconselho o uso do modo de implementação de aplicativo independente do Java.

Uma descrição deste modo de implementação é:

O aplicativo é instalado na unidade local e é executado como um programa independente usando uma cópia privada dos tempos de execução Java e JavaFX. O aplicativo pode ser iniciado da mesma maneira que outros aplicativos nativos para esse sistema operacional, por exemplo, usando um atalho na área de trabalho ou uma input de menu.

Você pode criar um aplicativo independente a partir da distribuição do Oracle JDK ou de uma compilation do OpenJDK que inclui o JavaFX. Atualmente, é mais fácil fazer isso com um Oracle JDK.

Como uma versão do Java é empacotada com seu aplicativo, você não precisa se preocupar com qual versão do Java pode ter sido pré-instalada na máquina, quais resources ela possui e se ela é ou não compatível com seu programa. Em vez disso, você pode testar seu aplicativo em uma versão exata do Java Runtime e distribuí-lo com seu aplicativo. A experiência do usuário para implantar seu aplicativo será o mesmo que instalar um aplicativo nativo em sua máquina (por exemplo, um .exe ou .msi do Windows instalado, um OS X .dmg, um linux .rpm ou .deb).

Atualização, abril de 2018: Informações sobre a política atual da Oracle em relação a desenvolvimentos futuros

  • O Futuro do JavaFX e Outras Atualizações do Mapa do Cliente Java Atualizadas por Donald Smith, Diretor Sênior de Gerenciamento de Produtos, Oracle.
  • Atualização do Java Client Roadmap – março de 2018, um white paper da Oracle.

Para mim isso funcionou.

sudo apt-get install openjfx

Como uma solução rápida, você pode copiar o arquivo JAR de tempo de execução JavaFX e aqueles referenciados a partir do Oracle JRE (JDK) ou qualquer aplicativo independente que use o JavaFX (por exemplo, JavaFX Scene Builder 2.0 ):

 cp /lib/ext/jfxrt.jar /lib/ext/ cp /lib/javafx.properties /lib/ cp /lib/amd64/libprism_* /lib/amd64/ cp /lib/amd64/libglass.so /lib/amd64/ cp /lib/amd64/libjavafx_* /lib/amd64/ 

apenas certifique-se de ter o gtk 2.18 ou superior

Tente obuildfactory .

Não é necessário modificar esses scripts (contém erro e não exatamente fazer a “coisa” necessária), eu vou fazer upload de meus scripts bifurcados a partir de obuildfactory nos próximos dias. e assim também atualizarei minha resposta de acordo.

Até então aproveite, senhor 🙂

De acordo com a integração do OpenJDK com o Oracle, o javaFX estará no primeiro trimestre de 2014 (consulte o roteiro: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Então, para a primeira pergunta, a resposta é que você tem que esperar até lá. Para a segunda questão, não há outro caminho. Então, por enquanto, vá com o java swing ou inicie o javaFX e aguarde