2013-03-23 43 views
4

所以,我的代碼現在看起來是這樣的:如何僅在框架關閉後運行方法?

Class2 className = new Class2(param1, param2); 
className = null; 
if (Class2 == null) { 
    refreshState(); 
} 

我想refreshState方法一旦className對象被銷燬運行。所以基本上Class2是一個在我現有的框架之上運行另一個框架的類。我只想在新框架關閉時運行該方法。我怎樣才能做到這一點?

回答

3

所以基本上Class2是一個類,它在我現有的框架之上運行另一個框架。我只想在新框架關閉時運行該方法。我怎樣才能做到這一點?

更好的解決方案是使用模式對話框,如JOptionPane或模態JDialog。這將停止在主窗口中處理Swing代碼,直到對話窗口被處理並且不再可見。然後您可以refreshState運行對話框關閉後立即:

僞代碼:

main window code 
show modal dialog 
refresh state here. This will be called only after the dialog has returned. 
+0

好,這可以工作,但問題是'Class2'本身就是一個完整的程序!它的工作不能被JDialog替代。 – 2013-03-23 03:11:50

+0

@ user2059238:我的回答仍然正確,您的問題是您的依賴窗口類是錯誤地創建的。你永遠不應該創建一個擴展JFrame的類,這樣你就可以避免這個問題。創建JPanels,然後您可以將它們放入對話框或JFrame中或當時需要的任何內容中。您需要重新編寫該代碼。 – 2013-03-23 03:15:39

+0

好的。似乎有點工作。我會嘗試並報告回來! – 2013-03-23 03:20:38

1

我想說添加java.awt.event.WindowListener中的框架:

class2.getFrame().addWindowsListener(new WindowAdapter() { 
    public void windowClosed(WindowEvent we) { 
     // The frame is closed, let's dot something else 
     refreshState(); 
    } 
} 
+0

不知道爲什麼,但這段代碼不適用於我。我肯定了'getFrame()',但是get方法addWindowsListener(new WindowAdapter(){})未定義爲類型JFrame' – 2013-03-24 15:28:20

相關問題