Swing: украсть фокус из других приложений (удобство использования в OS X) - PullRequest
3 голосов
/ 28 июля 2010

У меня есть приложение в java swing, которое работает в системном трее большую часть времени. Пользователь может использовать Tray Menu для выполнения нескольких действий. Одним из таких действий является показ окна приложения. У меня проблема с удобством использования на OS X.

В окнах , если пользователь открывает окно приложения, а затем переключается на другое приложение, он может переключиться обратно на мое приложение с помощью панели задач . Но в OS X приложение работает в режиме, в котором приложение не имеет меню, а также не будет отображаться в списке Command + Tab.

__LSUIElement имеет значение true в info.plist file

Так что моя проблема в том, что если пользователь открывает окно приложения, а затем переключается на другое приложение, он не может переключиться обратно, если не щелкнет само окно (которое может находиться за многими другими окнами). Самый простой способ для пользователя - снова открыть окно с помощью иконки в трее, но так как окно уже открыто, я не могу вывести его на передний план.

Итак, как отвлечься от других приложений и вывести окно вперед?

EDIT:

Моя проблема не в том, чтобы получить «Приложение, работающее в качестве агента» . У меня уже есть это работает. Проблема, которую я имею, состоит в том, чтобы получить окно моей программы наверх при его создании. Я не могу сделать это в Java.

Ответы [ 3 ]

1 голос
/ 16 августа 2010

Код, указанный в ответе на вопрос ниже, сделал свое дело

Как вывести окно на фронт?

1 голос
/ 05 декабря 2015

После долгих попыток сделать то же самое, я обнаружил, что для меня самое простое решение:

try {
    String[] cmd = new String[2];
    cmd[0] = "open";
    cmd[1] = "/Applications/MyApp.app";

    Runtime.getRuntime().exec(cmd);
}
catch(Exception ex) {
    //ignore since there's nothing else that can be done
}

По сути, я решил выполнить другой процесс через JVM, который использует команду «open» в Mac OS X, чтобы открыть приложение, которое оборачивает Java-программу, создавшую иконку в трее. При повторном открытии окна окно будет выведено вперед, поскольку оно уже запущено.

1 голос
/ 30 июля 2010

Вы можете вызвать activateIgnoringOtherApps: с параметром true, когда пользователь нажимает значок в строке меню (или, тем не менее, вы открываете окно).Однако вам придется подключиться к какао с Java.

...