创建动态代理 (java.lang.reflect.Proxy) 会导致 OS X(至少 10.7 和 10.8)将焦点集中到创建代理的 Java 应用程序。
我创建的代理包装了一个启动外部进程的对象。该外部进程希望获得焦点,但当 Java 进程窃取焦点时,事情就会失败。
似乎 OS X 正在将 Java 进程提升到停靠点,这就是它从其他应用程序中抢走焦点的原因。有谁知道如何防止这种情况吗?
最佳答案
如果您的代码涉及与 AWT 子系统有关的任何内容,您通常会看到 Mac Java 应用程序的停靠图标。这包括看似无害的事情,例如计算字体规范,而不仅仅是显示 JFrame
等明显的情况。
如果您的 Java 代码不需要实际显示任何 GUI 组件,您可以将系统属性 java.awt.headless
设置为字符串 true
以防止其启动启动 native 窗口系统(尽管如果您使用此选项集运行,然后执行需要 native GUI 的操作,您将得到一个异常)。
关于java - 在 Java 中创建动态代理抢走了 OS X 的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028316/