2012-07-19 46 views
1

我有两个独立的应用程序,每个应用程序都运行在它自己的JVM中。 App1实现一个ServerSocket并等待请求。 App2实现一个Socket并执行对App1的请求。Java:将JFrame焦点转移到另一个JFrame

在App2执行请求(并将焦点传递给App1)或App1完成请求(并抓取焦点)之后,App1应该成为活动进程/窗口。

我该怎么做?

我尝试使用App1上的Window.toFront()方法,但发生的所有事情都是任务栏中的闪烁条。

+0

您可能需要使用JNI或JNA解决这个虽然解决方案届时将依赖于平台。您是否100%确定这些应用程序需要在单独的JVM中运行? – 2012-07-19 14:31:18

+0

请不要在问题中包含像sigs这样的噪音。 – 2012-07-20 01:32:51

+0

你好,感谢你的回复。两个应用程序都独立运行App1是我为我公司编写的应用程序,而App2是由我们的一些合作伙伴编写的第三方软件。 App1将在中期被App2取代。所以现在我们的代理将与App2一起工作,并且如果需要的话,在App1中查找其他信息。为了简化工作流程,查找可以从App2发布。所以我的上司想要一个解决方案,可以从App2发出一个查询(由于套接字模式,它可以正常工作),然后将焦点从App2传输到App1以显示所需的信息。 – 2012-07-20 09:00:44

回答

1

您可以尝试将requestFocusInWindow()requestFocus()与toFront()组合使用。但是,不能保证这会成功。焦点行为在一定程度上取决于平台。

从另一个问题,这个功能似乎在Windows 7上运行:

private void BringToFront() { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      if(jFrame != null) { 
       jFrame.toFront(); 
       jFrame.repaint(); 
      } 
     } 
    }); 
} 
+0

编辑了我的答案了一下,但取决于操作系统请求JFrame中组件的焦点可能会使窗口出现在前面。我知道它适用于Windows XP,但从未在Windows 7上试过。 – Chris911 2012-07-19 14:38:11

+0

谢谢。 Downvote删除,upvote给出。值得尝试看看这是否可行。 – 2012-07-19 14:40:22

+0

你好,谢谢你的回复。我在Windows XP机器上尝试了所有可能的组合,但都没有成功。所有尝试只是突出显示任务栏中的App1的酒吧。 – 2012-07-20 09:03:28