javafx和openjdk

vjrehmav  于 2021-06-30  发布在  Java
关注(0)|答案(6)|浏览(718)

我正在尝试决定是否可以切换到javafx作为java应用程序的用户界面。我的大多数用户都会使用oraclejre,它现在集成了javafx。但是,有些人正在使用openjdk(在linux上)。这个(旧的)问题表明openjdk处理javafx非常糟糕。根据这个问题,替代的openjfx只能完全集成到版本9中的openjdk中。所以我的问题有两个:
openjdk对javafx的支持还那么差吗?
如果是这样的话,是否有linux发行版已经提供了openjfx包,这样用户就不用自己构建了?

ocebsuys

ocebsuys1#

对我来说这很管用。

$ sudo apt-get install openjfx
wmvff8tz

wmvff8tz2#

据oracle称,openjdk和javafx的集成将于2014年第1季度进行(见路线图:http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). 所以,对于第一个问题,答案是你必须等到那时。对于第二个问题,没有别的办法了。所以,现在使用javaswing或者启动javafx并等待

mbjcgjjk

mbjcgjjk3#

同时回答这个问题:
在哪里可以获得openjdk(windows)的预构建javafx库
在linux上这并不是一个真正的问题,但是在windows上这并不是那么容易,特别是如果你想发布jre的话。
实际上,您可以将openjfx与windows上的openjdk 8结合使用,您只需自己组装即可:
从以下位置下载openjdk:https://github.com/adoptopenjdk/openjdk8-releases/releases/tag/jdk8u172-b11
从此处下载openjfx:https://github.com/skylandtw/openjfx-binary-windows/releases/tag/v8u172-b11
从jdk上的openfxzip复制所有文件,瞧,你有一个带有javafx的openjdk。
更新:
幸运的是,azul现在有一个openjdk+openjfx版本,可以在他们的社区页面下载:https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

rdlzhqv9

rdlzhqv94#

试试obuildfactory。
有必要修改这些脚本(包含错误和不完全做“事情”要求),我将上传我的脚本分叉从obuildfactory在未来几天。所以我也会相应地更新我的答案。
在那之前好好享受吧,先生:)

sqserrrh

sqserrrh5#

javafx是openjdk的一部分
javafx项目本身是开源的,是openjdk项目的一部分。
2019年12月更新
有关如何使用开源javafx的最新信息,请访问https://openjfx.io. 这包括使用javafx作为从现有jdk(如开放jdk安装)访问的模块库的说明。
javafx的开源代码库位于https://github.com/openjdk/jfx.
在链接的源位置,您可以找到openjavafx的许可证文件(当前此许可证与openjdk的许可证匹配:gpl+classpath exception)。
项目的wiki位于:https://wiki.openjdk.java.net/display/openjfx/main
如果您想快速开始使用openjavafx,belsoft liberica jdk发行版提供了openjdk的预构建二进制文件,其中(当前)包括各种平台的openjavafx。
java14计划实现jep343:packaging工具,它“支持本地打包格式,为最终用户提供自然的安装体验”。这些格式包括windows上的msi和exe,macos上的pkg和dmg,linux上的deb和rpm。”,用于使用本机安装程序部署基于openjfx的应用程序,无需附加平台依赖项(如预装jdk)。
过时的信息
从openjdk存储库构建javafx
您可以完全从源代码构建openjdk的开放版本(包括javafx),该源代码不依赖于oraclejdk或封闭源代码。
更新:使用从openjdk源代码预构建的javafx发行版
正如对这个问题的评论和另一个答案所指出的,debian linux发行版提供了一个基于openjdk的javafx二进制发行版:
https://packages.qa.debian.org/o/openjfx.html
安装方式:

sudo apt-get install openjfx

(据我所知,目前这只适用于Java8)。
openjdk和oraclejdk在javafx方面的区别
为Java8提供了以下信息。从Java9开始,javafx不推荐使用vp6编码,oracle webstart/browser嵌入式应用程序部署技术也不推荐使用。因此,未来的javafx版本,即使是由oracle发布的,也可能不包括任何非开源的技术。
oraclejdk包含一些openjdk无法使用的软件。javafx有两个主要组件。
由谷歌和谷歌共同拥有的on2vp6视频编解码器还没有开源。
oraclewebstart/browser嵌入式应用部署技术。
这意味着javafx的开放版本不能播放vp6 flv文件。这不是一个很大的损失,因为它是很难找到vp6编码器或媒体编码在vp6。
其他更常见的视频格式,如h.264,在javafx的开放版本中可以正常播放(只要您在目标机器上预装了适当的编解码器)。
webstart/browser嵌入式部署技术的缺乏实际上与openjdk本身有关,而不是与javafx有关。此技术可用于部署非javafx应用程序。
如果开源社区为java(和其他软件)开发一种部署技术,完全取代webstart和浏览器嵌入式部署方法,从而为应用程序分发提供一种轻量级、低影响的用户体验,那就太好了。我相信已经有一些项目开始服务于这样一个目标,但他们还没有达到一个高成熟度和采用水平。
我个人认为webstart/browser嵌入式部署是遗留技术,目前有更好的方法来部署许多javafx应用程序(例如自包含的应用程序)。
2019年12月更新:
webstart for jdk 11+的开源版本已经开发出来,可以在https://openwebstart.com.
谁需要创建包含javafx的linux openjdk发行版
为基于openjdk的linux发行版(如redhat、ubuntu等)创建包的人可以为jdk和jre创建包含javafx的rpm。然后,这些软件发行商需要将生成的包放在他们的标准发行代码存储库(例如fedora/red hat network存储库)中。目前还没有做到这一点,但如果在2014年3月Java8发布时Java8Linux包中没有包含javafx,我会非常惊讶。
更新,2019年12月:
现在javafx已经从大多数二进制jdk和jre发行版(包括oracle的发行版)中分离出来,取而代之的是,它可以作为一个独立的sdk、一组jmods或作为一个库依赖项从中央maven存储库中获得(如下所述)https://openjfx.io),标准的linux openjdk发行版不太需要包含javafx。
如果您想要一个包含javafx的预构建jdk,可以考虑libericajdk发行版,它是为各种平台提供的。
大量应用程序的部署建议
我建议使用java的自包含应用程序部署模式。
此部署模式的描述如下:
应用程序安装在本地驱动器上,并使用java和javafx运行时的私有副本作为独立程序运行。该应用程序可以与该操作系统的其他本机应用程序相同的方式启动,例如使用桌面快捷方式或菜单项。
您可以从oraclejdk发行版或从包含javafx的openjdk构建构建一个自包含的应用程序。目前使用oraclejdk更容易做到这一点。
由于java的一个版本与您的应用程序捆绑在一起,您不必关心机器上预装了什么版本的java,它有什么功能,以及它是否与您的程序兼容。相反,您可以根据一个精确的java运行时版本测试应用程序,并将其与应用程序一起分发。部署应用程序的用户体验将与在其计算机上安装本机应用程序相同(例如,安装了windows.exe或.msi、os x.dmg、linux.rpm或.deb)。
注意:自包含的应用程序特性仅适用于Java8和Java9,而不适用于Java10-13。java14,通过jep343:packaging工具,计划再次从openjdk发行版提供对这个特性的支持。
更新,2018年4月:关于甲骨文当前政策未来发展的信息
javafx的未来和其他java客户机路线图更新,作者:oracle产品管理高级总监donald smith。
java客户端路线图更新-2018年3月oracle白皮书。

g6baxovj

g6baxovj6#

作为一个快速解决方案,您可以复制javafx运行时jar文件以及从oracle jre(jdk)或任何使用javafx的自包含应用程序(例如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/

只要确保你有GTK2.18或更高

相关问题