在非 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();
}
}
}
我的 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();
}
}
}