Как определить, поддерживается ли графический интерфейс?
Мне нужна моя программа Java, чтобы иметь два режима отображения: интерфейс GUI и интерфейс командной строки. Если я запустил его в Windows, OS X или другой графической среде, я должен получить интерфейс GUI, но если я запустил его через SSH, я должен получить интерфейс командной строки.
Как определить, можно ли отображать графический интерфейс или использовать интерфейс командной строки?
Ответы
Ответ 1
У вас есть два вопроса:
1) Убедитесь, что вы работаете в безголовой среде (без графики). Проверьте этот метод:
if (GraphicsEnvironment.isHeadless()) {
// non gui mode
} else {
// gui mode
}
2) Проверьте, в какой ОС вы работаете:
System.getProperty("os.name")
Однако второй (2) вопрос будет возвращать одно и то же имя, даже если вы работаете в безголовой среде.
Ответ 2
Оба кинжала и Витаута правы.
Я просто хотел добавить одну рекомендацию. При разработке приложения следует использовать шаблон MVC (model-view-controller). Итак, если он работает в режиме пользовательского интерфейса, он использует UIView, иначе ConsoleView.
Dacwe рекомендует вам, как вы можете автоматически решить, какой режим использовать. Из-за того, что Java является языком с межплатформенной платформой, я думаю, что это название операционной системы для вас не имеет значения. Тот факт, что система имеет графическую среду, более уместен, поэтому используйте GraphicsEnvironment.isHeadless()
.
System.console()
поможет вам создать управляемое оболочкой приложение.
Ответ 3
Я рекомендую добавить параметр командной строки, который определяет, использовать ли командный или графический пользовательский интерфейс, потому что пользователь может захотеть использовать интерфейс командной строки даже в среде, где доступен графический интерфейс.
Вы также можете проверить, доступно ли консольное устройство с помощью System.console().
Ответ 4
Почему бы не создать два класса: один для командной строки и один для графического интерфейса? Далее вы можете создать два продукта, а затем вы можете доставить безголовый без зависимостей от графических библиотек.
Ответ 5
Я искал те же решения и придумал просто использовать аргумент, поэтому, когда я запускаю свою программу из comandline, аргументы отличаются длиной
if(args.length > 0) {
System.out.println("command line mode");
}