在Java中创建动态代理将重点放在OS X上

在Java中创建动态代理将重点放在OS X上,java,macos,process,focus,dynamic-proxy,Java,Macos,Process,Focus,Dynamic Proxy,创建动态代理(java.lang.reflect.proxy)会使OSX(至少10.7和10.8)将焦点放在创建代理的java应用程序上 我创建的代理包装了一个启动外部进程的对象。这个外部进程期望有焦点,当Java进程窃取焦点时,事情就会失败 似乎OSX正在将Java进程提升到dock,这就是它从其他应用程序窃取焦点的原因。有人知道如何防止这种情况吗?如果您的代码涉及到与AWT子系统有关的任何内容,您通常会收到Mac Java应用程序的dock图标。这包括一些看似无害的事情,比如计算字体度量,而

创建动态代理(java.lang.reflect.proxy)会使OSX(至少10.7和10.8)将焦点放在创建代理的java应用程序上

我创建的代理包装了一个启动外部进程的对象。这个外部进程期望有焦点,当Java进程窃取焦点时,事情就会失败


似乎OSX正在将Java进程提升到dock,这就是它从其他应用程序窃取焦点的原因。有人知道如何防止这种情况吗?

如果您的代码涉及到与AWT子系统有关的任何内容,您通常会收到Mac Java应用程序的dock图标。这包括一些看似无害的事情,比如计算字体度量,而不仅仅是显示
JFrame
等明显的情况


如果Java代码不需要实际显示任何GUI组件,则可以将系统属性
Java.awt.headless
设置为字符串
true
,以防止其启动本机窗口系统(如果您使用此选项集运行,然后执行需要本机GUI的操作,则会出现异常)。

什么界面你在代理吗?如果有任何东西接触到AWT代码,你会得到Mac Java应用程序的对接图标,其中包括看似无害的东西,如字体度量。如果你知道你不需要从Java代码中显示用户界面,你可以试着用
-Djava.AWT.headless=true
。太棒了!我代理的界面确实导入了一些AWT类和
-Djava.AWT.headless=true
成功了。谢谢!我添加了我的评论作为答案。