我開發了一個swing應用程序,但每次運行應用程序時都會打開新窗口。 我想,如果一個窗口已經打開,其他不允許打開。只有一個擺動框架窗口在時間打開
5
A
回答
17
Here是Java的單應用程序實例的例子:
單個實例應用程序是一種只允許到無論用戶嘗試多少次啓動運行的應用程序1。
該應用程序嘗試打開特定端口上的套接字。如果您的應用程序的另一個實例已在運行,則打開套接字將失敗。
這對您已經足夠了,因此您不必使用用於將新應用程序註冊到第一個應用程序的代碼部分。
與將某種標誌寫入文件系統/註冊表/任何內容相比,使用套接字有一個很大的優勢:
即使應用程序崩潰,它也會被刪除。
1
它實際上聽起來像你只想要一個應用程序一次打開。在這種情況下,爲什麼不在應用程序運行時取出文件鎖定或類似內容,並檢查啓動時是否啓動。當你的程序沒有完全退出時,頭痛(當然)會清除鎖定。
1
正如Peter Lang所鏈接的,我的首選解決方案是使用套接字。當您的應用程序啓動時,您可以啓動服務器套接字監聽localhost上的傳入連接(以及您選擇的端口)。在代碼中發生這種情況之前,您可以嘗試連接到服務器套接字,如果成功,您知道還有另一個實例已經打開,因此您可以使用適當的消息退出當前實例。
在您的服務器套接字實現中,您還可以添加在接收傳入連接時實際強制應用程序的當前實例到前臺的功能。
0
public class Samp {
JFrame f=new JFrame();
File ff=new File("D:\\a.txt");
FileWriter fw;
public Samp() {
f.setBounds(0, 0, 200, 200);
try {
Scanner sc=new Scanner(ff);
if(!sc.hasNext()) {
fw=new FileWriter(ff);
fw.write("Running");
fw.close();
} else {
System.exit(0);
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
Scanner sc = new Scanner(ff);
if(sc.hasNext()) {
fw=new FileWriter(ff);
fw.write("");
fw.close();
}
} catch (Exception ex) { }
}
};
f.setVisible(true);
f.addWindowListener(wndCloser);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new Samp();
}
}
0
你的意思是運行像一個單身的GUI?我已經在過去通過使靜態私有「視圖管理器」,使其爲空,而不是創建或可見第一次GUI直到做到了這一點在創建之後,就像使用經典單例一樣,當應用程序再次運行時,GUI被設置爲可見的......我有幾個框架遵循此設計 - 在這些框架中,GUI不是「主要」也是命令行和類似的接口,所以通過命令行召喚GUI ...
0
使用單數模式,如example所示!
相關問題
- 1. 如何在擺動上打開窗口
- 2. javascript - 在新窗口中打開框架
- 3. 在當前窗口的中心打開一個框架
- 4. 在目標框架中打開一個窗口
- 5. 在同一個窗口中打開框架內的鏈接
- 6. WPF中只能打開一個窗口?
- 7. 搖擺:關閉一個框架,並在同一時刻打開另一個
- 8. Eclipse未打開框架窗口
- 9. HTML框架:框架集在新標籤頁/窗口中打開
- 10. 打開一個框不是新窗口
- 11. 爲什麼窗口打開有時會打開一個新選項卡,有時會彈出一個窗口?
- 12. 如何在只有一個窗口中打開HTML /標籤
- 13. jquery打開窗口,但只有當窗口未打開時;然後在其他窗口前顯示它?
- 14. Kendo UI:當打開一個窗口時,我想替換一個窗口,但不打開一個新窗口
- 15. 當只有一個人應該打開兩個窗口
- 16. 一個頁面只能在一個窗口中打開
- 17. 在同一時間打開多個窗口,popupWindow和新標籤
- 18. 使用javascript在同一時間打開多個窗口
- 19. 跟蹤在Java中打開一個窗口的時間長度
- 20. 鏈接將在2個框架內打開新窗口
- 21. 打開一個子窗口
- 22. 打開一個新窗口
- 23. 打開一個EXE窗口
- 24. cscript.exe打開一個窗口
- 25. 有一個彈出窗口打開後
- 26. 如何在打開新框架時關閉前一個框架
- 27. 只允許打開一次窗口
- 28. WPF - C# - 只打開父窗口一次
- 29. 只需打開沒有黑色終端窗口的Cygwin Emacs框架
- 30. Javascript打開一個窗口打開窗口
使用套接字似乎是一個非常有用的想法 - 比我提到的文件鎖更可靠。 – 2010-03-27 12:31:28
感謝您回覆 您給出的解決方案非常完美。 – chetan 2010-03-29 13:31:55
但是使用哪個端口號?就我個人而言,我會在運行時分配一個端口,並且在臨時目錄中寫入一個小文件以保存所選端口號似乎是不可避免的。 – 2011-11-22 08:13:19