我在java swing
中有一个应用程序,它在大多数时间都在系统托盘中运行。用户可以使用Tray Menu
执行多个操作。其中一个操作是显示应用程序窗口。我遇到的问题是OS X上的可用性。
在Windows 中,如果用户启动应用程序窗口并稍后切换到另一个应用程序,他们可以使用任务栏切换回我的应用程序。但在OS X中,应用程序运行的模式是应用程序没有菜单,也不会出现在Command + Tab
列表中。
__LSUIElement
在info.plist file
所以我的问题是,如果用户打开应用程序窗口,稍后切换到另一个应用程序,除非他们点击窗口本身(可能在许多其他窗口后面),否则他们无法切换回来。最简单的方法是让用户使用托盘图标再次打开窗口,但由于窗口已经打开,我无法将其带到前面。
那么,如何将焦点从其他应用程序中移开并将窗口移到前面?
修改
我的问题不是让“应用程序作为代理运行”。我已经有了这个工作。我遇到的问题是在创建时将程序窗口置于顶部。我无法在java中执行此操作。
答案 0 :(得分:1)
当用户点击菜单栏中的图标(或打开窗口)时,您可以使用true
参数调用activateIgnoringOtherApps:
。但是,您必须从Java挂钩Cocoa。
答案 1 :(得分:1)
以下问题答案中提供的代码可以解决问题
答案 2 :(得分: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执行另一个进程,JVM使用Mac OS X上的“open”命令打开包装创建托盘图标的java程序的应用程序。告诉它再次打开它会导致窗口被带到前面,因为它已经在运行。