JavaFX被移除后在JRE 8u451上运行JDK 8编写的JavaFX应用的求助
兄弟,我太懂你这种被版本更新突然卡脖子的糟心了!咱们不用被逼着改Swing或者跳去高版本JDK,给你几个实操性拉满的方案,都是我之前帮同行踩过坑验证过的:
方案一:从带JavaFX的JDK 8版本提取运行时嵌入应用
你可以找一个JDK 8u441及之前的版本(这些版本还捆绑JavaFX),提取里面的jfxrt.jar和对应平台的本地库文件(比如Windows下bin目录里的.dll,Linuxlib目录的.so,Maclib目录的.dylib)。然后在项目里把jfxrt.jar添加为编译和运行依赖,打包时把本地库也一起打进安装包。运行时要么在启动脚本里指定java.library.path参数指向本地库目录,要么用Maven Shade这类打包插件自动处理本地库的提取逻辑,这样应用启动时就能加载到JavaFX的本地组件了。方案二:打包成自包含的应用程序
用JDK 8u441及之前版本里的javapackager工具,把你的应用打包成对应平台的自包含安装包(比如Windows的exe、Mac的dmg、Linux的deb/rpm)。这个工具会自动把JavaFX运行时、JRE和你的应用代码打包在一起,生成的包完全不依赖系统上安装的JRE,就算系统装的是8u451也完全不影响,用户双击就能运行。方案三:给运行环境单独补装JavaFX 8独立运行时
你可以下载JavaFX 8独立SDK(注意要和应用平台匹配),然后在运行应用时把JavaFX的lib目录加到类路径里。比如Windows下的运行命令可以写成:java -cp "你的应用.jar;javafx-sdk-8\lib\*" 你的主类全路径如果是用IDE运行,直接在项目的运行配置里把JavaFX的lib目录添加到classpath就行,这样应用就能找到缺失的JavaFX类了。
另外还有个小细节:如果你的项目用Maven或Gradle管理,直接在依赖里加上JavaFX 8的jfxrt.jar(可以从Maven中央仓库找到对应版本的依赖),打包时开启依赖打包,生成的Jar包就会包含JavaFX的类,不用手动提取了。
备注:内容来源于stack exchange,提问作者Edward Northwind

