Java将应用程序推向前台(OSX)

Java将应用程序推向前台(OSX),java,macos,window,focus,Java,Macos,Window,Focus,我一直在互联网上搜索这个问题,从堆栈溢出答案到堆栈溢出答案,尝试洛可可,或者Class.forName(“com.apple.cococoa.application.NSApplication”)等等 事情的底线是,看在上帝的份上,我不知道如何让我的Java应用程序专注于OSX 让我澄清一下:我的应用程序没有窗口(将来会有,但有时可能根本没有窗口)。我需要一种不依赖windows的方法来集中我的应用程序 由于没有发现任何东西,我绝望地决定尝试一种依靠窗口的解决方案: private static

我一直在互联网上搜索这个问题,从堆栈溢出答案到堆栈溢出答案,尝试洛可可,或者
Class.forName(“com.apple.cococoa.application.NSApplication”)等等

事情的底线是,看在上帝的份上,我不知道如何让我的Java应用程序专注于OSX

让我澄清一下:我的应用程序没有窗口(将来会有,但有时可能根本没有窗口)。我需要一种不依赖windows的方法来集中我的应用程序

由于没有发现任何东西,我绝望地决定尝试一种依靠窗口的解决方案:

private static void BringSelfToFocus()
{
    java.awt.EventQueue.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            Window window = new JFrame("Test");
            window.toFront();
            window.repaint();
        }
    });
}
然而,就像我的其他徒劳尝试一样,这一尝试失败了

所以,是的,虽然这在技术上是一个重复的问题,但我已经尝试了我能找到的所有其他答案,无论出于什么原因,它们都不起作用

谁能在这件事上伸出援助之手?谢谢


-乔治好!我有了最后一个想法,它成功了!我用了Applescript

private static void BringSelfToFocus()
{
    AppleScript("tell me to activate");
}


private static String AppleScript(String script)
{
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("AppleScript");

    if (engine != null) {
        try
        {
            return (String)engine.eval(script);
        }
        catch (ScriptException e)
        {
            e.printStackTrace();
        }
    }
    return null;
}

哇!我也遇到了同样的问题,你的解决方案非常有效!toFront()不能正常工作令人遗憾,但很高兴有了这种解决方法。谢谢有人在这方面取得了成功吗?我试图将此逻辑添加到
@Override public void setVisible(boolean b)
,但没有成功。我的对话框大部分时间仍在其他窗口后面。。。。我还尝试了
告诉应用程序\“我的应用程序\”激活
(可以从终端启动,但不能从Java启动),并尝试在
窗口事件后启动它。打开的窗口
被触发无效…回答我自己的问题
setVisible(…)
对操作顺序很挑剔。
super.setVisible(…)
应该是每个函数中的最后一个调用。标准逻辑会把它放在另一个位置,但这似乎很好。@tresf您找到了一个解决方案,将
apple.awt.UIElement
设置为
true
,将对话框放在前面吗?