原文地址: JavaFx 软件重启功能实现 | Stars-One的杂货小窝

本篇使用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)
}

JavaFx 软件重启功能实现的更多相关文章

  1. Winform 注册机通用软件注册功能之建立有效的软件保护机制

    本文转载:http://www.cnblogs.com/umplatform/archive/2013/01/23/2873001.html 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制 ...

  2. OD调试6—使未注册版软件的功能得以实现

    OD调试6—使未注册版软件的功能得以实现 本节使用的软件下载链接 (想动手试验的朋友可以下载来试试) 继续开始我OD调试教程的学习笔记. 本次试验对真正的程序进行逆向.(之前的都是为破解而专门设计的小 ...

  3. 简单实现wc.exe软件基本功能

    简单实现wc.exe软件基本功能 软件需求分析: 一.基本功能 支持 -c  统计字符数(char count) 支持 -w  统计单词数(word count) 支持 -l  统计总行数(line ...

  4. php -- 实现linux关机、重启功能

    有时候,我们自己可以DIY一个控制面板实现linux的关机重启功能.众所周知,linux是一个基于文件的操作系统,所以要实现系统的关机重启功能必须满足以下两点 一.知道命令的绝对路径 在linux下操 ...

  5. CentOS版本禁用Ctrl+Alt+Del重启功能

    1  禁用Ctrl+Alt+Del重启功能(不重启系统的前提条件) 1.1  CentOS 6 ##查看/etc/inittab确认Ctrl+Alt+Del相关配置文件 cat /etc/initta ...

  6. Autodesk Maya 2019 for Mac(三维动画软件)最新功能介绍

    Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等.Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是 ...

  7. STM32单片机的软件重启和远程重启

    STM32单片机可以通过以下代码实现重启(core_cm3.h).同时如果利用AT命令进行无线通讯,服务器后台和客户端之间用MODBUS通讯即4G+MODBUS RTU,可以利用F05写单个线圈的方法 ...

  8. QT实现软件重启

    //重启软件 void MainWindow::on_pushButton_UI_reboot_clicked() { //方式1 需要主函数中事件循环判断 //qApp->exit(773); ...

  9. Android调用系统关机与重启功能

    我是在android源码里编译的package/apps/,因为需要调用的关机接口是不对上层开放的,在eclipse里面不能调用. 我主要是介绍调用android的关机功能,因为在调试过程中,关机的一 ...

随机推荐

  1. 【LeetCode】935. Knight Dialer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划TLE 空间换时间,利用对称性 优化空间复杂 ...

  2. 【LeetCode】919. Complete Binary Tree Inserter 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址: https://leetcode. ...

  3. 1080 - Binary Simulation

    1080 - Binary Simulation    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 ...

  4. D. Persistent Bookcase(Codeforces Round #368 (Div. 2))

    D. Persistent Bookcase time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  5. 难搞的偏向锁终于被 Java 移除了

    背景 在 JDK1.5 之前,面对 Java 并发问题, synchronized 是一招鲜的解决方案: 普通同步方法,锁上当前实例对象 静态同步方法,锁上当前类 Class 对象 同步块,锁上括号里 ...

  6. Second Order Optimization for Adversarial Robustness and Interpretability

    目录 概 主要内容 (4)式的求解 超参数 Tsiligkaridis T., Roberts J. Second Order Optimization for Adversarial Robustn ...

  7. electron串口通信使用serialport安装报错

    1.报错信息没有安装python环境 1 gyp ERR! find Python 2 gyp ERR! find Python Python is not set from command line ...

  8. Java+Eclipse+MySQL+Swing实现学生会考成绩管理系统(免费完整项目)

    版权声明:原创不易,本文禁止抄袭.转载,侵权必究! 目录 一.需求开发文档 二.数据库设计文档 三.功能模块部分代码及效果展示 四.完整源码下载 五.作者Info 一.需求开发文档 项目完整文件列表: ...

  9. 浅议像素化与体素化Part.1——平面图形像素化

    什么是像素化 学计算机的人往往都比较清楚图形和图像的区别,而且往往能够从数据结构的角度理解这两者的区别,一般来说,图形是由几何空间中的基本图元所组成,表现为用外部轮廓线条勾勒成的矢量图.例如由计算机绘 ...

  10. CSS基础 背景图片的相关属性

    属性名: background-size: 宽度 高度; 属性值 说明 数字+px 简单方便,常用 百分比 相当于盒子自身的百分比,如:百分百,就是就算是图片变形也要显示 contain 动比例缩放, ...