原文地址: 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)
}
使用的話,只需要在VIew的按鈕點擊事件對應處呼叫方法即可
button("測驗") {
action{
restartApp(resources.url("/desc.json"))
}
}
確保你的resources檔案夾,有desc.json檔案(或者是其他檔案)

PS:后續會收錄到common-controls的庫中
提問之前,請先看提問須知 點擊右側圖示發起提問
TornadoFx學習交流群:1071184701
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422981.html
標籤:Java
上一篇:Java 圖片裁剪,截取
