2012-07-19 104 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

相關問題