Как определить, поддерживается ли графический интерфейс? - PullRequest
22 голосов
/ 22 ноября 2010

Мне нужно, чтобы моя Java-программа имела два режима отображения: интерфейс с графическим интерфейсом и интерфейс командной строки. Если я запускаю его в Windows, OS X или другой графической среде, я должен получить интерфейс GUI, но если я запускаю его через SSH, я должен получить интерфейс командной строки.

Как я могу определить, можно ли отображать графический интерфейс или использовать интерфейс командной строки?

Ответы [ 5 ]

31 голосов
/ 22 ноября 2010

На самом деле у вас есть два вопроса:

1) Проверьте, работаете ли вы в автономном режиме (без графики).Проверьте этот метод:

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

2) Проверьте, под какой ОС вы работаете:

System.getProperty("os.name")

Однако второй (2) вопрос вернет то же имя, даже если вы работаете вбезголовая среда.

4 голосов
/ 22 ноября 2010

Дакве и Витаут правы. Я просто хотел добавить одну рекомендацию. Вы должны использовать шаблон MVC (модель-представление-контроллер) при разработке приложения. Таким образом, если он работает в режиме пользовательского интерфейса, он использует UIView, в противном случае ConsoleView.

Dacwe порекомендовал вам, как автоматически решить, какой режим использовать. Из-за того, что Java является кроссплатформенным языком, я думаю, что название операционной системы не имеет значения для вас. Тот факт, что система имеет графическое окружение, более актуален, поэтому используйте GraphicsEnvironment.isHeadless().

System.console() поможет вам создать контролируемое оболочкой приложение.

2 голосов
/ 22 ноября 2010

Почему бы не создать два класса, один для командной строки и один для графического интерфейса?Далее вам может понадобиться создать два продукта, а затем вы можете доставить безголовый продукт без зависимостей для графических библиотек.

2 голосов
/ 22 ноября 2010

Я рекомендую добавить параметр командной строки, который определяет, использовать ли командную строку или графический интерфейс пользователя, поскольку пользователь может захотеть использовать интерфейс командной строки даже в среде, где доступен графический интерфейс пользователя.

Вы также можете проверить, доступно ли консольное устройство с помощью System.console () .

0 голосов
/ 06 февраля 2015

Я искал такое же решение и придумал просто использовать аргумент, поэтому, когда я запускаю свою программу из командной строки, аргументы отличаются по длине

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