1

也許在這種情況下不值得擔心,但可以說你有兩個類,一個帶有其所有組件的JFrame以及一個處理遠程客戶端請求的類似服務器的類。用戶可以通過GUI啓動和停止服務器對象,並顯示每個服務器對象發生的各種事件。無論我是否使用顯式模式(如MVC),似乎JFrame需要對服務器類的引用(以調用啓動和停止),並且服務器需要對JFrame的引用(以通知它某些事件) 。在Swing GUI中避免循環引用

這是一個問題,還是我以錯誤的方式看待這種情況?

回答

4

這聽起來像是一個應用Listener模式的地方。您的服務器可能有一個名爲addSomethingListener(SomethingListener listener)的方法,JFrame將調用SomethingListener的實現。當適當的事件發生時,你的服務器就會調用監聽器的方法。

+0

我同意Listener模式是要走的路,但只是因爲對JFrame的引用位於ArrayList中並且沒有硬編碼並不能消除有循環引用的事實。其實,第二個想法,因爲循環引用不是一個問題(GC可以發送它們),循環依賴是真正的唯一問題。 Listener模式解決了這個問題,因爲GUI可以依賴於'商業'代碼,但是反過來卻不行。謝謝你幫我解釋清楚。 – 2010-03-15 19:29:30