在非 Java 应用完成后重新获得焦点

Regain focus after non-Java app finishes

我的 OS X 独立 Java 程序使用

Desktop.getDesktop().open(f);    // Run the Tutorial.pdf file

到运行客户端的默认PDFReader并显示一个文件。 Reader 完成,控制返回给调用 Java 的程序。但是,Java 程序没有焦点。客户必须单击它才能获得焦点。 Java程序有没有办法重新获得焦点?我已经尝试了几件事,但都与程序组件的焦点有关 - 而不是程序本身。

要激活您的应用程序 window 使用:

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();
        }
    }
}