我有一個可執行的jar,它運行一個帶有內部SqlLite數據庫的Java Swing應用程序。 用戶(錯誤)不只是點擊jar,導致數據庫鎖。 我想阻止這種行爲。 我能做什麼? 非常感謝你如何防止在可執行jar上多次點擊
1
A
回答
0
訪問數據庫的第一個實例應該獲得某種類型的數據庫上的鎖,所有進一步的實例首先應該檢查是否已經有這樣的鎖。如果有 - >「我不是第一個,顯示警告/錯誤,退出」,如果沒有「我是第一個,請鎖定,繼續。」
1
您需要某種同步機制。
您可以自己編寫代碼,也可以爲應用程序創建Java WebStart配置,其中Java WebStart可以通過單實例服務處理「只有一個調用」(您必須在代碼中明確調用) 。
0
您可以使用JPS或JNI(需要在不同的平臺上實現)。附件是檢查Java應用程序實例的JPS代碼。您可以將其修改爲更多OO。
使用文件,套接字或註冊表作爲鎖並不完美,因爲錯誤操作可能會使您的應用程序無法再啓動(例如,另一個程序佔用相同的端口)很多機會
import java.io.*;
public class TestRun {
public TestRun() {}
public static void main(String args[]) {
String jpsApp = "jps -mlvV";
int count = 0;
try {
Process p = Runtime.getRuntime().exec(jpsApp);
//parser the result to check if TestAPP is running
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println();
System.out.println(line);
String[] pair = line.split(" ");
if (pair.length >= 2) {
System.out.println("name is " + pair[1]);
if (pair[1].trim().indexOf("TestRun") > -1) {
count++;
System.out.println("count is " + count);
}
}
}
//it is running, just exit the second instance
if(count>1){
System.out.println("Has run a application!");
return;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
相關問題
- 1. 在jQuery中,如何防止多次點擊執行我的代碼多次?
- 2. CustomDialog - 防止多次點擊
- 3. 防止多次點擊
- 4. 防止多次執行可觀察
- 5. 防止多次執行asynctask
- 6. 防止多次執行
- 7. 如何防止在JComboBox上多次點擊
- 8. 如何防止第一次點擊執行
- 9. 防止多次點擊發起動畫
- 10. 防止點擊功能多次觸發
- 11. 防止多次點擊一個鏈接
- 12. 防止laravel link_to_action在雙擊上執行
- 13. 如何防止第二次點擊UICollectionViewCell?
- 14. jquery點擊多次執行
- 15. 如何防止在AngularJS中多次點擊錨標籤?
- 16. jQuery - 防止相同的點擊功能一次運行多次
- 17. 如何防止生成多個NSOperations的多次點擊
- 18. 如何防止多次點擊多個表單提交的PHP
- 19. 防止在檢查的收音機上多次點擊
- 20. 如何防止javascript中的ajax函數一次執行多次
- 21. 防止多次執行Lua腳本
- 22. 防止設備多次執行操作
- 23. 防止多次執行JavaScript函數
- 24. 如何防止AsyncTask在onScroll事件中被多次執行?
- 25. 如何防止用戶在鏈接的圖像上多次點擊?
- 26. 停止執行e.preventDefault();第二次點擊?
- 27. 如何防止多次點擊一個錨標籤按鈕
- 28. 多次點擊可以防止AJAX請求
- 29. 當滑塊動畫執行時,防止多次點擊外部控件
- 30. 防止間隔排隊上多次點擊
檢查此:http://stackoverflow.com/questions/177189/how-to-implement-a-single-instance-java-application它會給你你正在尋找的代碼。 – Austin
@StefanBe,這個問題的源代碼並不重要 –