Можете ли вы обнаружить Mac Spaces в Java?
У меня есть Java-приложение, которое было в основном построено для Mac. Я должен быть в состоянии сделать одну из трех вещей:
Мои заявки всегда следуют текущему пространству. Это означает, что если я нахожусь на рабочем столе 2 и запускаю свое приложение, то я переключаюсь на рабочий стол 3, и мое приложение автоматически отображается на рабочем столе 3. Это эквивалентно щелчку правой кнопкой мыши на значке приложения в доке, выберите "Параметры", затем выберите "Все рабочие столы". Если бы я мог как-то сделать это поведением по умолчанию для моего приложения, не требуя действий пользователя, то это было бы здорово!
Захват экрана определенного места. В настоящее время я использую класс Robot, чтобы сделать снимок экрана. Если есть способ, которым я могу указать, какое пространство для захвата, а не только текущее пространство, то это было бы здорово!
Уметь хотя бы определять, покидает ли текущее пространство.
Я начинаю склоняться к тому, что ни одно из них невозможно. Но если вы можете оказать какую-либо помощь или возможные обходные пути, это было бы здорово!
Я также поиграл с GraphicsEnvironment, GraphicsDevice, GraphicsConfiguration, но не повезло. Он не возвращает никакой информации о виртуальных рабочих столах Mac (Spaces).
Что также усложняет ситуацию, так это то, что я стараюсь избегать использования кода для платформы любой ценой! Я знаю, что могу использовать JNI для этого, или что-то может быть в расширении java-apple. Но в настоящее время я использую одну ветвь кода и сборки как для Mac, так и для Windows. Я пытаюсь избежать двух отдельных сборок и двоичных файлов для обеих платформ.
2 ответа
Ответ "нет", если вы не пишете нативный код и не используете JNI. Одной из ключевых особенностей дизайна Java является то, что он не зависит от ОС. То, что вы просите, является исключительно Mac OS X. Я не вижу ничего в Apple Java Extensions, которое также помогает.
Нет, насколько я знаю, Java не имеет никакой специальной поддержки для Spaces, поэтому вам нужно использовать платформо-зависимый, нативный код. Тем не менее, JNI- со всем его уродством - не единственный вариант. Вместо этого вы можете использовать JNA, что намного удобнее для программистов и намного проще в отладке.
В вашем приложении вы можете обнаружить платформу. Если это платформа, для которой вы написали специфичный для платформы код, вы можете выполнить этот код. Если нет, вы можете вернуться к стандартной реализации Java.