2010-11-22 71 views
20

我需要我的Java程序有兩種顯示模式:一個GUI界面和一個命令行界面。如果我在Windows,OS X或其他圖形環境中運行它,我應該得到GUI界面,但是如果我通過SSH運行它,我應該得到命令行界面。如何檢測圖形界面是否受支持?

如何檢測GUI是否可以顯示,或者我應該使用命令行界面?

回答

26

你實際上有兩個問題:

1)檢查,如果你在一個無頭環境(沒有圖形)運行。檢查這個方法:

if (GraphicsEnvironment.isHeadless()) { 
    // non gui mode 
} else { 
    // gui mode 
} 

2)檢查你正在運行的操作系統:

System.getProperty("os.name") 

但是,第二個(2)問題將返回,即使你在一具無頭環境中使用相同的名稱。

+1

剛一說明。 「isHeadless」小寫字母L;讓我搞砸了hehehe – 2010-11-22 12:51:27

+0

@dacwe看起來問題中關於操作系統的部分只是對已經完成的研究的解釋,而不是第二個問題。因此,我編輯了原始問題,因爲它是噪音。我相信你應該編輯你的答案以反映澄清的問題。 – Vulcan 2015-02-23 11:28:15

+0

這不是一個完全正確的答案,請參閱此處[問題](http://stackoverflow.com/a/16611566/1584507) ** isHeadless **將返回意外的真實在某些情況下,這是不是你想要什麼,當你在尋找是否有真正的屏幕或顯示器。 – Indigo 2015-02-23 13:12:54

2

我建議添加一個命令行選項,以確定是否使用命令行或圖形用戶界面,因爲用戶可能要使用命令行界面,即使在GUI可用的環境中也是如此。

您還可以檢查控制檯設備是否可用System.console()

2

爲什麼不創建兩個類,一個用於命令行,一個用於GUI?再往下,你可能想要創建兩個產品,然後你可以傳遞無頭的,而不依賴於圖形庫。

+1

這是我的想法,但是,不知道如何檢測哪個正在運行。 Thnx – 2010-11-22 12:22:26

3

dacwe和vitaut都是對的。 我只是想添加一個建議。在設計應用程序時,應該使用MVC(模型 - 視圖 - 控制器)模式。所以,如果它在UI模式下運行,它將使用UIView,否則使用ConsoleView。

Dacwe建議您如何自動決定使用哪種模式。由於Java是跨平臺的語言,我認爲這個名字是操作系統對你來說是無關緊要的。系統具有圖形環境的事實更具相關性,因此請使用GraphicsEnvironment.isHeadless()

System.console()將幫助您創建shell控制的應用程序。

-2

我一直在尋找TE相同的解決方案,並提出了簡單地用一個參數,所以當我從comandline的ARGS運行我的程序不同長度

if(args.length > 0) { 
    System.out.println("command line mode"); 
} 
+3

您也可以爲btw應用程序指定參數。而且,您也可以在控制檯中不帶任何參數的情況下調用您的應用程序。 – 2015-05-15 03:51:27