原文地址: JavaFx 软件重启功能实现 | Stars-One的杂货小窝
【JavaFx 软件重启功能实现】本篇使用Kotlin在TornadoFx中实践,没有Java代码的示例,各位自行参考,思路已在本文中提及
实现思路主要思路为,使用命令行执行java命令,重新打开jar包,同时关闭当前的jar包
但如何知道当前jar包位置?
前面这一篇Kotlin/Java 读取Jar文件里的指定文件 | Stars-One的杂货小窝也有所讲解到,我们可以获得jar包中的具体的文件
但是上一篇写的前提是,已知到一个jar包文件的目录,但目前我们不会知道用户把jar包放在何处,所以就不明确jar包的位置
但是也有方法,我们在jar包使用个资源文件,之后根据此资源文件即可定位到路径
在jar包如果获取resources的资源,可以得到下面的一个url字符串 jar:file:/D:/project/javafx/lanzou-downloader/out/test.jar!/desc.json
对其进行字符串处理,即可得到当前jar包文件位置
Kotlin实现Kotlin主要是在TornadoFx的环境写的,用了TornadoFx相关的工具方法
当然,由于没使用linux系统测试过,下面存在有未实践过的代码,请各位知悉
java.exe和javaw.exe区别:
java主要是命令行使用,而javaw,则是对应java应用程序(有UI)
源码/** * 获取当前jar包的文件路径 * * @param url 在View中使用resources.url("")获取的参数 * @return */fun getCurrentJarPath(url: URL): File {val filePath = url.path.substringBeforeLast("!/")return File(URI.create(filePath))}/** * 重启当前应用 * * @param url 在View中使用resources.url("")获取的参数 */fun restartApp(url: URL) {val jarFile = getCurrentJarPath(url)//开启新应用Runtime.getRuntime().exec("cmd.exe /c javaw -jar ${jarFile.path}")//关闭当前应用Platform.exit()}/** * 打开指定jar文件 * * @param jarFile */fun openApp(jarFile: File) {if (jarFile.extension.toLowerCase() == "jar") {if (isWin()) {Runtime.getRuntime().exec("cmd.exe /c javaw -jar ${jarFile.path}")} else {//linux或mac(未实践过)Runtime.getRuntime().exec("javaw -jar ${jarFile.path}")}}}/** * 当前系统是否为window系统 */fun isWin(): Boolean {val prop = System.getProperties()val os = prop.getProperty("os.name")return os.contains("win", true)}使用的话,只需要在VIew的按钮点击事件对应处调用方法即可
button("测试") {action{restartApp(resources.url("/desc.json"))}}确保你的resources文件夹,有desc.json文件(或者是其他文件)

文章插图
PS:后续会收录到common-controls的库中
提问之前,请先看提问须知点击右侧图标发起提问
文章插图
或者加入QQ群一起学习

文章插图
TornadoFx学习交流群:1071184701

文章插图

文章插图
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
