3

我有一个应用程序,java swing大部分时间都在系统托盘中运行。用户可以使用Tray Menu来执行多个操作。其中一项操作是显示应用程序窗口。我遇到的问题是 OS X 上的可用性。

在 windows中,如果用户打开应用程序窗口并稍后切换到另一个应用程序,他们可以使用任务栏切换回我的应用程序。但在 OS X 中,应用程序以没有菜单且不会出现在Command + Tab列表中的模式运行。

__LSUIElement在设置为真info.plist file

所以我的问题是,如果用户打开应用程序窗口,然后切换到另一个应用程序,除非他们点击窗口本身(可能在许多其他窗口后面),否则他们无法切换回来。最简单的方法是用户使用托盘图标再次打开窗口,但由于窗口已经打开,我无法将其带到前面。

那么,如何将焦点从其他应用程序中移开并将我的窗口放在前面?

编辑:

我的问题不在于让 'Application running as agent'。我已经有那个工作了。我遇到的问题是在创建程序窗口时将其置于顶部。我无法在 java 中做到这一点。

4

3 回答 3

1

当用户单击菜单栏中的图标(或者您打开窗口)时,您可以activateIgnoringOtherApps:使用参数调用。true不过,您必须从 Java 中连接到 Cocoa。

于 2010-07-29T21:10:44.343 回答
1

下面问题的答案中提供的代码起到了作用

如何将窗户带到前面?

于 2010-08-16T06:46:34.463 回答
1

经过努力尝试做同样的事情,我发现以下对我来说是最简单的解决方案:

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 执行另一个进程,该进程使用 Mac OS X 上的“打开”命令打开包装了创建托盘图标的 java 程序的应用程序。告诉它再次打开它会导致窗口被带到前面,因为它已经在运行。

于 2015-12-05T00:04:20.267 回答