2015-02-23 3 views
2

Обновление: как отмечено дубликат, я просто хочу упомянуть, это похоже на дубликат, но ответ на другой упомянутый вопрос не совсем корректен. Вместо этого обратитесь к принятому ответу ниже. isHeadless вернется в некоторых случаях неожиданно.Проверьте, есть ли у компьютера/компьютера дисплей или графический выход

Его немного странная ситуация, но в последнее время я создаю очень простое Java-приложение, которое можно запускать в режиме консоли/терминала или в режиме интерфейса JavaFX.

Однако, при использовании на удаленном компьютере, на котором нет дисплея. Я получил ошибку, что это приложение JavaFX UI не может быть запущено в системах без дисплея, что довольно очевидно.

Чтобы решить эту проблему, я искал надежный способ определения наличия в системе какого-либо дисплея и может инициировать приложение JavaFX, которое должно быть независимым от платформы решением, поскольку это может быть Windows или Ubuntu/Linux или Mac.

Структура приложения:

A Главного консольное приложение, которые в зависимости от входных аргументов выполняют Внутренне консольного приложение приложения или UI.

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

Любая идея, как мы можем достичь этого или предложения в правильном направлении, было бы замечательно.

+0

что насчет try..catch? Можете ли вы определить точный код ошибки/сообщение/тип? – jean

+0

@jean: да, абсолютно верно, но я искал больше похоже на внутренний Java-способ обнаружения этого, а не даже на стадии исключения. Вот почему я сказал прочный путь. Потому что, поскольку Java выбрасывает это исключение, это означает, что он должен был его читать или обнаруживать. Это то, что я хочу знать :) – Indigo

ответ

1

Я думаю, вы могли бы использовать java.awt.GraphicsEnvironment

GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); 

, который возвращает массив со всеми доступными экранами. Если этот массив пуст, монитора нет.

Edit: Об использовании isHeadless(), вы можете посмотреть на How to determine if GraphicsEnvironment exists

+0

Да, именно это я и хотел. Но просто глядя на вопрос, обозначенный дубликат Вулканом [здесь] (http://stackoverflow.com/a/4245227/1584507), и это похоже на правильный подход, любые комментарии по этому поводу? – Indigo

+1

Отредактировал мой ответ со ссылкой о GraphicsEnvironment.isHeadless() – antonio

+0

Спасибо, что очистил весь дым :) – Indigo

Смежные вопросы