因为要适配国产统信UOS系统,要求JavaFx程序能简便双击运行,由于网上UOS开发相关文章少,多数文章没用,因此花了不少时间,踩了不少坑,下面记录一些遇到的问题,我的程序环境是jdk1.8,为maven模式开发的JavaFx程序。在这之前要先打开开发者模式和允许任意应用运行
1.Jar文件运行
打包过程就不说了,网上很多,我是在IDEA上打包出的jar,放到uos系统后,首先下载jdk配置环境,使用命令行下载之后,jdk环境会默认配置好,我下载的是openjdk8,然后遇到第一个坑Jar文件在命令行使用Java -jar xxx.jar,无法运行,该文件在Windows系统可正常运行,但在UOS上报"找不到或无法加载主类"如下错误:
如图可以看到jdk版本和报错信息,也可以看到两个系统jdk版本一致,这个问题整了很久,后面在UOS上试运行Windows系统下打包的测试Jar文件,发现可以正常运行,于是猜测问题可能出在JavaFx组件上,又试运行Swing编写的界面程序,可以正常运行,确定是JavaFX导致的问题,为什么同个版本jdk会出现这种问题呢,一番搜索答案出现了
因为Linux下,下载的是openJdk,而openJdk是没有附带JavaFx,而Windows上用的是OracleJdk是有JavaFx,虽然Oracle后面的Jdk版本也把JavaFx分开了,但是Oracle jdk1.8是有的,这就是导致JavaFx不能跨环境运行的原因,找到原因,于是开始操作,我先想到的是把openjdk缺的Jfx组件补上,发现不行,找到Linux各样技术文章总结大致步骤应该如下,
1.要找到对应jar包,2.要放到openjdk对应文件夹下 3.运行命令导出模块
这个方法我没有成功,也没看到哪个文章把这件事说清楚,所以我换个思路,不用openjdk1.8,用更高版本,但还是要面对openjavafx和openjdk整合问题,后面准备研究。
第三个就是图中提到的方法了,安装oraclejdk1.8,这样就可以了,下面是安装步骤
2.UOS安装Oracle Jdk1.8
首先卸载原先的jdk环境,可以打开终端在命令行上执行
sudo apt-get remove openjdk*
执行完毕后,openjdk会卸载,并清除配置环境,可以用Java -version做测试,接下来就是安装OracleJdk1.8,首先要下载Linux下的OracleJdk1.8,资源在这jdk-8u371-linux-x64.tar.gz jdk-8u371-windows-x64.exe 【jdk-8u371】 全平台下载_horizon08的博客-CSDN博客
如果链接失效,可以给该博主留言,我只下载了我需要的版本。下载解压之后就要自己配置环境了,但是我想尽可能让程序安装运行过程简便,于是省去环境配置步骤,实现双击运行。
3.双击运行Jar文件
这个过程在刚开始研究时也遇到很多问题,因为待开发产品不需要上商城推广,所以我走了简便方法,需要上商城的可以去了解打包审核流程,UOS也可以安装AppImage格式,关于这些我没有深入研究,下面只介绍如何双击运行Jar文件,一共有两种方法,选其一即可
a.使用.sh脚本运行jar包
创建start.txt文件(文件命名随意),编辑如下内容:
#! /bin/bash
/data/home/UOS/ideajdk/jdk1.8/bin/java -jar face.jar
/data/home/UOS/ideajdk/jdk1.8/bin/java是下载解压的oraclejdk目录地址,face.jar是需要启动的jar文件,根据自己实际情况做改动,然后修改文件后缀名为.sh,右键->属性->允许以程序运行,即可双击,选择运行即可
注意:要运行的jar文件没有指定目录地址,所以start.sh文件要和jar文件在同一个目录下,不然要指定jar所在的文件目录
b.配置.desktop格式文件,运行jar包
这个方式相比于a,更为通用,a方式只是针对一个jar包运行,而b方式配置之后则可以运行所有.jar文件格式,具体配置方法如下:
首先找到usr/share/applications文件夹,如图
在该文件夹下打开终端,具体内容参考
linux java 双击运行_在深度deepin系统中使用双击运行jar文件的方法-CSDN博客
因为没有jdk配置环境变量,所以需要在这里做些改动,
Exec字段要写上jdk的文件路径,如果环境已经配置,则不需要,保存之后双击jar文件
选择默认打开方式为Java程序,后续就可以双击直接运行了
除此之外,UOS也可以运行exe文件,需要下载Wine,后续有时间再补充文章