非Java应用程序完成后重新获得焦点
我的OSX独立Java程序使用非Java应用程序完成后重新获得焦点,java,macos,desktop,Java,Macos,Desktop,我的OSX独立Java程序使用 Desktop.getDesktop().open(f); // Run the Tutorial.pdf file 运行客户端的默认PDF阅读器并显示文件。读取器完成,控制权返回给调用的Java程序。但是,Java程序没有重点。客户端必须单击它才能获得焦点。Java程序有没有办法重新获得焦点?我试过几种方法,但都与程序组件的焦点有关,而不是程序本身 要激活应用程序窗口,请使用: myFrame.toFront(); 请确保包装它,使其在EDT上运行,例
Desktop.getDesktop().open(f); // Run the Tutorial.pdf file
运行客户端的默认PDF阅读器并显示文件。读取器完成,控制权返回给调用的Java程序。但是,Java程序没有重点。客户端必须单击它才能获得焦点。Java程序有没有办法重新获得焦点?我试过几种方法,但都与程序组件的焦点有关,而不是程序本身 要激活应用程序窗口,请使用:
myFrame.toFront();
请确保包装它,使其在EDT上运行,例如SwingUtilities.invokeLater()
如果出于某种原因,这不起作用,您可以尝试:
myFrame.setAlwaysOnTop(true);
myFrame.setAlwaysOnTop(false);
如果仍然不起作用,你可以试试AppleScript
public class Test extends JFrame {
public Test() {
setSize(100, 100);
setVisible(true);
}
public static void main(final String[] args) {
final Timer timer = new Timer();
final Test test = new Test();
final TimerTask timerTask = new TimerTask() {
@Override
public void run() {
test.bringToFront();
}
};
timer.schedule(timerTask, 5000, 5000);
}
private void bringToFront() {
final ScriptEngineManager mgr = new ScriptEngineManager();
final ScriptEngine engine = mgr.getEngineByName("AppleScript");
try {
engine.eval("tell me to activate");
} catch (final ScriptException ex) {
ex.printStackTrace();
}
}
}
不幸的是,你的建议是我尝试过的几种没有效果的建议之一。你的AppleScript解决方案在一般情况下效果很好。在我的特定情况下,教程PDF文件是交互式的(可变持续时间),因此我无法设置“bringToFront”timerTask以在Reader应用程序完成时激活。不过,谢谢你的帮助。