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
,将对话框放在前面吗?