2010-07-06 62 views
0

我想知道當我在向窗體框架視圖添加偵聽器時嘗試關閉Java Swing應用程序時出現的問題。下面是如何產生我的問題:在Netbeans中,創建一個新的Swing應用程序項目,然後在主類中創建一個本地方法,通過this.getMainFrame()添加一個空鼠標監聽器到主窗口addMouseListener(new MouseAdapter() {})。進入窗體類,並在窗體的構造函數中使用.getApplication()。createListenerMethod()方法調用該方法,緊接在InitComponents()之後。添加鼠標偵聽器後,進程將不會關閉

運行程序,你會看到,關閉它後,netbean的小進度條表示,它仍在運行:(

我發現,如果我設置窗體的默認close操作「處置」,它解決了問題爲什麼如果我調用一個從表單到主應用程序類的方法來爲它自己添加一個監聽器呢?我之所以這樣來添加監聽器是因爲我想將主應用程序邏輯保存在main文件類,我感到不安編寫代碼在表單設計器分析類

回答

3

我不認爲鼠標監聽器與你所看到的有任何關係,雖然NB代碼生成嚮導可能會做一些奇怪的塞入f在受保護的地區。

如果您想重複使用它們(顯示/隱藏多次),Swing不會自動處理幀/窗口。通常,您想跟蹤關閉的窗口/將它們從窗口偵聽器中丟棄,或者在更簡單的情況下使用JFrame.setDefaultCloseOperation()。大多數情況下,每個合理的大型Swing應用程序都有某種全局狀態跟蹤功能,可以在滿足終止條件時處理所有窗口並關閉線程池。

如果您願意花時間學習它,我們也可以使用NetBeans RCP,它負責GUI應用程序的許多方面(我不建議用於小應用程序)。 Swing應用框架的另一種選擇是Jide Software的JDAF(我的首選)和「Better Swing Application Framework」(來自kenai.com)

+0

是的,我的應用程序非常小,所以我很高興我不需要製作它已經不必要地複雜了。 InitComponents之後的代碼看起來對於向主應用程序添加調用非常安全,您還將如何與私有組件進行通信?或者,也許我想保留所有的邏輯表單? – chaz 2010-07-06 01:10:01

+0

我不知道你在InitComponents中有什麼(在5年以上沒有使用過NetBeans)。一般來說,您嘗試在AbstractAction的後代中完成大部分簡短的工作。 SwingWorkers或您的框架提供的任何任務執行工具都需要長時間的工作。這兩個操縱(通常是定製的)小部件模型,但不要參考實際的小部件本身。 – ddimitrov 2010-07-06 03:34:21

+0

InitComponents是設計師生成的,實際上它很好地包裝在評論符號中,所以你知道我在那裏做任何事情。所以像你說的添加動作監聽器是唯一一次在引用小部件時確保安全。實際上,我在窗體中設置了所有可以操作的動作偵聽器,以便他們可以在主類中調用面向動作的方法。即「searchCommitted」可以來自按下來自文本字段的輸入或者點擊按鈕。這幾乎是問題產生的原因。實際上,我發現默認關閉處理程序的默認值是「隱藏」表單。 – chaz 2010-07-07 14:58:08