我需要我的Java程序有兩種顯示模式:一個GUI界面和一個命令行界面。如果我在Windows,OS X或其他圖形環境中運行它,我應該得到GUI界面,但是如果我通過SSH運行它,我應該得到命令行界面。如何檢測圖形界面是否受支持?
如何檢測GUI是否可以顯示,或者我應該使用命令行界面?
我需要我的Java程序有兩種顯示模式:一個GUI界面和一個命令行界面。如果我在Windows,OS X或其他圖形環境中運行它,我應該得到GUI界面,但是如果我通過SSH運行它,我應該得到命令行界面。如何檢測圖形界面是否受支持?
如何檢測GUI是否可以顯示,或者我應該使用命令行界面?
你實際上有兩個問題:
1)檢查,如果你在一個無頭環境(沒有圖形)運行。檢查這個方法:
if (GraphicsEnvironment.isHeadless()) {
// non gui mode
} else {
// gui mode
}
2)檢查你正在運行的操作系統:
System.getProperty("os.name")
但是,第二個(2)問題將返回,即使你在一具無頭環境中使用相同的名稱。
我建議添加一個命令行選項,以確定是否使用命令行或圖形用戶界面,因爲用戶可能要使用命令行界面,即使在GUI可用的環境中也是如此。
您還可以檢查控制檯設備是否可用System.console()。
爲什麼不創建兩個類,一個用於命令行,一個用於GUI?再往下,你可能想要創建兩個產品,然後你可以傳遞無頭的,而不依賴於圖形庫。
這是我的想法,但是,不知道如何檢測哪個正在運行。 Thnx – 2010-11-22 12:22:26
dacwe和vitaut都是對的。 我只是想添加一個建議。在設計應用程序時,應該使用MVC(模型 - 視圖 - 控制器)模式。所以,如果它在UI模式下運行,它將使用UIView,否則使用ConsoleView。
Dacwe建議您如何自動決定使用哪種模式。由於Java是跨平臺的語言,我認爲這個名字是操作系統對你來說是無關緊要的。系統具有圖形環境的事實更具相關性,因此請使用GraphicsEnvironment.isHeadless()
。
System.console()
將幫助您創建shell控制的應用程序。
我一直在尋找TE相同的解決方案,並提出了簡單地用一個參數,所以當我從comandline的ARGS運行我的程序不同長度
if(args.length > 0) {
System.out.println("command line mode");
}
您也可以爲btw應用程序指定參數。而且,您也可以在控制檯中不帶任何參數的情況下調用您的應用程序。 – 2015-05-15 03:51:27
剛一說明。 「isHeadless」小寫字母L;讓我搞砸了hehehe – 2010-11-22 12:51:27
@dacwe看起來問題中關於操作系統的部分只是對已經完成的研究的解釋,而不是第二個問題。因此,我編輯了原始問題,因爲它是噪音。我相信你應該編輯你的答案以反映澄清的問題。 – Vulcan 2015-02-23 11:28:15
這不是一個完全正確的答案,請參閱此處[問題](http://stackoverflow.com/a/16611566/1584507) ** isHeadless **將返回意外的真實在某些情況下,這是不是你想要什麼,當你在尋找是否有真正的屏幕或顯示器。 – Indigo 2015-02-23 13:12:54