Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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");
}