2012-05-08 2 views
7

У меня есть приложение Java, которое было в основном построено для Mac. Мне нужно иметь возможность сделать одну из трех вещей:Можете ли вы обнаружить Mac-пространства на Java?

  1. Должно ли мое приложение всегда следовать текущему пространству. Смысл, если я нахожусь на рабочем столе 2 и запускаю свое приложение, то я переключусь на Desktop 3, мое приложение будет автоматически видно на рабочем столе 3. Это эквивалентно щелчку правой кнопкой мыши по значку приложения на доке, выберите «Параметры», затем выберите «Все настольные компьютеры». Если я могу каким-то образом сделать это по умолчанию для моего приложения, не требуя действий пользователя, то это было бы здорово!

  2. Захват экрана определенного пространства. В настоящее время я использую класс Robot для захвата экрана. Если есть способ, я могу указать, какое пространство захватить, а не только текущее пространство, тогда это было бы здорово!

  3. Уметь, по крайней мере, обнаруживать, если оставить текущее пространство.

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

Я также играл с GraphicsEnvironment, GraphicsDevice, GraphicsConfiguration, но не повезло. Он не возвращает никакой информации о виртуальных рабочих столах Mac (Spaces).

Что также затрудняет работу, я стараюсь избегать использования кода конкретной платформы любой ценой! Я знаю, что могу использовать JNI для этого, или может быть что-то в расширении java-apple. Но в настоящее время я использую единую ветвь кода и создаю для Mac & Windows. Я пытаюсь избежать наличия двух отдельных сборок и двоичных файлов для обеих платформ.

+0

Вам не нужно создавать отдельные сборки - вам просто нужно определить платформу и условную логику (плюс ваш собственный код). Вы, в конце концов, хотите сделать что-то, что * очень специфично для платформы. EDIT: на самом деле Drizzt321 уже сказал это в ответ на ответ Грея. –

ответ

3

Ответ «нет», если вы не пишете собственный код и используете JNI. Одной из ключевых особенностей дизайна Java является то, что она является агностикой ОС. То, о чем вы просите, это чрезвычайно Mac OS X. Я ничего не вижу в расширениях Java Java, которые тоже помогают.

+2

Что сказал Грэй, только вы можете сделать это, если у вас есть код ветвящегося кода, где вы проверяете, работаете ли вы в OS X, если этот запуск JNI-кода выполняется, в противном случае это код Windows JNI (или ничего). – Drizzt321

+0

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

+0

Я понял, что вы просто проверяли факты. Да, код пользователя Java мало знает о «графическом устройстве», на котором выполняется рендеринг. JRE предназначена для защиты пользователя от таких знаний. Удачи. – Gray

2

Нет, насколько я знаю, Java не имеет специальной поддержки пространств, поэтому вам понадобится использовать собственный код для конкретной платформы. Однако JNI - со всем его уродством - не единственный вариант. Вместо этого вы можете использовать JNA, что намного удобнее для программистов и намного проще отлаживать.

В вашем приложении вы можете обнаружить платформу. Если это платформа, на которой вы написали код, специфичный для платформы, вы можете выполнить этот код. Если нет, вы можете вернуться к стандартной реализации Java.

+0

Благодарим вас за предложение JNA. –