JavaFX e OpenJDK

109

Estou tentando decidir se posso mudar para JavaFX para a interface do usuário do meu aplicativo Java. A maioria dos meus usuários estaria usando o Oracle JRE, que tem o JavaFX integrado atualmente. No entanto, alguns estão usando OpenJDK (no Linux). Esta (velha) questão sugere que o OpenJDK lida muito mal com o JavaFX. De acordo com esta pergunta, o OpenJFX alternativo só será totalmente integrado ao OpenJDK na versão 9. Portanto, minha pergunta é dupla:

  • O suporte a JavaFX no OpenJDK ainda é tão ruim?
  • Em caso afirmativo, há alguma distribuição Linux que já oferece um pacote OpenJFX para que os usuários não tenham que criá-lo sozinhos ?
mdriesen
fonte
Qual é o modo de execução do seu aplicativo (como ele é implantado?)
jewelsea
@jewelsea É executado como um programa autônomo.
mdriesen
@docM seria uma solução mudar para o oracle- (sun) -jdk para as máquinas ubuntu? webupd8.org/2012/01/…
nyyrikki 01 de
@nyyrikki Essa é uma opção. Mas eu prefiro ficar com Java Swing se JavaFX e OpenJDK não combinam.
mdriesen,
2
@Yngve Eu portei tudo para o JavaFX quando o Ubuntu e o Debian começaram a incluir os pacotes.
mdriesen,

Respostas:

99

JavaFX faz parte do OpenJDK

O próprio projeto JavaFX é open source e faz parte do projeto OpenJDK .

Atualização de dezembro de 2019

Para obter informações atuais sobre como usar o JavaFX de código aberto, visite https://openjfx.io . Isso inclui instruções sobre como usar o JavaFX como uma biblioteca modular acessada de um JDK existente (como uma instalação do Open JDK ).

O repositório de código-fonte aberto para JavaFX está em https://github.com/openjdk/jfx .

No link do local de origem, você pode encontrar arquivos de licença para JavaFX aberto (atualmente, esta licença corresponde à licença para OpenJDK: exceção de caminho de classe GPL +).

O wiki do projeto está localizado em: https://wiki.openjdk.java.net/display/OpenJFX/Main

Se você deseja um início rápido para usar o JavaFX aberto, as distribuições Belsoft Liberica JDK fornecem binários pré-construídos do OpenJDK que (atualmente) incluem JavaFX aberto para uma variedade de plataformas.

Para distribuição como aplicativos independentes, o Java 14 está programado para implementar JEP 343: Packaging Tool , que "Suporta formatos de empacotamento nativos para dar aos usuários finais uma experiência de instalação natural. Esses formatos incluem msi e exe no Windows, pkg e dmg no macOS e deb e rpm no Linux. ", para implantação de aplicativos baseados em OpenJFX com instaladores nativos e sem dependências de plataforma adicionais (como um JDK pré-instalado).


Informações mais antigas que podem ficar desatualizadas com o tempo

Construindo JavaFX a partir do repositório OpenJDK

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

Atualização: usando uma distribuição JavaFX pré-construída a partir de fontes OpenJDK

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

(atualmente isso só funciona para Java 8 até onde eu sei).

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

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

O Oracle JDK inclui alguns softwares que não podem ser usados ​​no OpenJDK. Existem dois componentes principais relacionados ao JavaFX.

  1. O codec de vídeo ON2 VP6, que é propriedade do Google e o Google não tem código aberto.
  2. A tecnologia de implantação de aplicativos 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 codificada em VP6.

Outros formatos de vídeo mais comuns, como H.264, serão reproduzidos sem problemas 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 WebStart / Browser Embedded é realmente algo a ver com o próprio OpenJDK, e não com o 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 outro software) que substituísse completamente os métodos de implantação WebStart e Browser Embedded, permitindo uma boa experiência de usuário leve e de baixo impacto para distribuição de aplicativos. Acredito que alguns projetos já começaram a atender a esse objetivo, mas ainda não atingiram um alto nível de maturidade e adoção.

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

Atualização de dezembro de 2019:

Uma versão de código aberto do WebStart para JDK 11+ foi desenvolvida e está disponível em https://openwebstart.com .

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

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

Atualização, dezembro de 2019 :

Agora que o JavaFX foi separado da maioria das distribuições binárias JDK e JRE (incluindo a distribuição da Oracle) e está, em vez disso, disponível como um SDK autônomo, conjunto de jmods ou como dependências de biblioteca disponíveis no repositório central Maven (conforme descrito como https://openjfx.io ), há menos necessidade de distribuições Linux OpenJDK padrão para incluir JavaFX.

Se você quiser um JDK pré-construído que inclua JavaFX, considere as distribuições do Liberica JDK , que são fornecidas para uma variedade de plataformas.

Conselhos sobre implantação de aplicativos substanciais

Aconselho usar o modo de implantação de aplicativo independente do Java .

Uma descrição desse modo de implantaçã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 forma que outros aplicativos nativos desse sistema operacional, por exemplo, usando um atalho na área de trabalho ou uma entrada de menu.

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

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

Nota: O recurso de aplicativo independente estava disponível apenas para Java 8 e 9, e não para Java 10-13. Java 14, via JEP 343: Packaging Tool , está programado para fornecer novamente suporte para esse recurso de distribuições OpenJDK.

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

jewelsea
fonte
@Emmanuel, obrigado pelo seu trabalho nisso. JavaFX é parte do JDK, então (pelo menos até que o JDK se torne modularizado) não tenho certeza por que haveria um pacote OpenJFX separado em vez de incluir todos os arquivos de tempo de execução necessários no pacote OpenJDK padrão (como é feito com o Distribuições Oracle JDK). A lista de discussão open-jfx seria um bom lugar se mais discussão for necessária.
jewelsea
Um pacote separado oferece certo grau de flexibilidade se alguém estiver interessado no JDK, mas não no JavaFX. Afinal, a modularização não é um objetivo do Java 9? :)
Emmanuel Bourg
11
"Atualmente isso não está sendo feito, mas eu ficaria muito surpreso se os pacotes Java 8 Linux não incluíssem o JavaFX quando o Java 8 for lançado em março de 2014". Você deve se surpreender, pois o OpenJDK 8 não inclui o OpenJFX.
2
O Arch Linux também tem pacotes para openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński
2
@NoBugs Esta pode ser uma resposta um pouco tarde para ser útil, mas o Ubuntu 14.04 não inclui o OpenJDK 8, e é por isso que você não consegue encontrar o pacote JFX correspondente. Não me lembro qual versão do Ubuntu o introduziu, mas definitivamente está disponível no Ubuntu 16.04 - junto com o pacote "openjfx".
Mike Allen
50

Para mim, isso funcionou.

$ sudo apt-get install openjfx
Vineel Kovvuri
fonte
3
Provavelmente a maneira mais fácil de adicionar JavaFX ao seu Linux JDK
Reimeus 01 de
Embora esta seja a resposta certa para muitos, alguns sistemas operacionais não fornecem este pacote. Para aqueles que não o fazem webupd8 PPApara Ubuntu e fedyinstalador de desktop para Fedora, existem duas maneiras rápidas de configurar o Oracle JDK / JRE mais recente, que inclui JavaFX.
tresf
3
Para o Ubuntu 18.04, ele ainda depende do Java 8, mas o padrão é o java 10. Se você instalá-lo, ficará com 2 javas.
jgomo3 de
De acordo com Como instalar o openjfx junto com o openjdk-11? , para Java versões 11+, para usar JavaFX, em vez de apt-get install openjfx(que atualmente funciona apenas para Java 8), você pode usar as instruções do site openjfx.io , onde JavaFX está "disponível como um SDK específico da plataforma, como um número de jmods, e como um conjunto de artefatos em maven central. ".
jewelsea
Um pacote Debian openjfx foi lançado para OpenJDK-11 em tracker.debian.org/pkg/openjfx , então talvez este método. sudo apt-get install openjfx, continuará a ter suporte e funcionar para versões posteriores do JavaFX e do ubuntu. Note que os pacotes Debian openjfx não parecem ser atualizados com tanta freqüência quanto as bibliotecas distribuídas por openjfx.io, então se você deseja usar a versão mais atualizada, é melhor usar uma distribuição openjfx.io.
jewelsea
11

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

cp <JRE_WITH_JAVAFX_HOME>/lib/ext/jfxrt.jar     <JRE_HOME>/lib/ext/
cp <JRE_WITH_JAVAFX_HOME>/lib/javafx.properties <JRE_HOME>/lib/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libprism_*  <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libglass.so <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libjavafx_* <JRE_HOME>/lib/amd64/

apenas certifique-se de ter o gtk 2.18 ou superior

Максим Шатов
fonte
Não consigo encontrar onde o openjfx está instalado no Ubuntu 18.04, mas roubei esses jars e outros arquivos de outro programa instalado no meu disco rígido (você pode verificar algo como phpstorm ou clion :)) e funcionou perfeitamente. Obrigado
Heichou
Copiei os arquivos de JDK1.8.0_251 (Oracle Java 1.8) para java-8-openjdk-amd64 (repositório ubuntu OpenJDK 8). Ainda não foi possível executar arquivos jar com JavaFX. Mas quando eu simplesmente vinculei ao jfxrt.jar como um jar de biblioteca externa em meu caminho de construção do Eclipse, os programas foram executados dentro do contexto do Eclipse. Executando "apt-cache policy libgtk2.0-0" deu "Instalado: 2.24.32-1ubuntu1"
Phil Freihofner
7

Também respondendo a esta pergunta:

Onde posso obter bibliotecas JavaFX pré-construídas para OpenJDK (Windows)

No Linux não é realmente um problema, mas no Windows não é tão fácil, especialmente se você deseja distribuir o JRE.

Você pode usar o OpenJFX com o OpenJDK 8 no Windows, basta montá-lo você mesmo:

Baixe o OpenJDK aqui: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Faça download do OpenJFX aqui: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

copie todos os arquivos do zip OpenFX em cima do JDK, voila, você tem um OpenJDK com JavaFX.

Atualização :

Felizmente da Azul, agora existe uma compilação OpenJDK + OpenJFX que pode ser baixada na página da comunidade: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Mauli
fonte
obrigado. Eu verifiquei o github-site AdoptOpenJDK, mas ele diz "repositório legado". Você sabe onde um binário OpenJFX compatível mais recente está disponível, correspondendo às compilações do novo repo github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman
3

Tente obuildfactory .

Há necessidade de modificar esses scripts (contém erro e não faz exatamente a "coisa" necessária), irei carregar meus scripts bifurcados da obuildfactory nos próximos dias. Portanto, também atualizarei minha resposta de acordo.

Até então, aproveite, senhor :)

DeepSidhu1313
fonte
1
infelizmente não há contrapartida do Windows para OpenJFX
madduci
0

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

Stathis Andronikos
fonte
o link em sua resposta está quebrado. O que
fechei
@ ILMostro_7 o link em seu comentário está quebrado
Blake
É velho o suficiente. Tenho certeza de que eles mudam de site conforme novos planos tomam forma.
ILMostro_7
O site a seguir indica que javafx será uma biblioteca independente começando com java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7