2013-10-28 46 views
0

首先,我不會說正確的英文,並對此表示歉意!Java,JDialog:處理後的返回值()

我在Java中製作股票系統,它工作正常,但我對JDialog實例中dispose()的正確使用有疑問。

我的代碼:

public Usuario getUsuario() { 
    this.setVisible(true); 
    this.dispose(); 
    return new VentanaConfigurarPrivilegios(new Usuario(textField.getText(), new String(passwordField.getPassword()))).getUsuario(); 
} 

此功能並返回的VentanaConfigurarPrivilegios新實例調用到getUsuario()Usuario,但無疑是對最後兩行,我的配置的JDialog,和之後,從textFields傳遞一個文本,它工作正常,但我不確定我是否以正確的方式做到這一點,我不喜歡代碼在使用時失敗。

再次,抱歉我的英語!謝謝。

+0

是對話框申報模式?我想這肯定是代碼如你所期望的那樣工作。爲了更好地幫助(比猜測更好),請發佈[SSCCE](http://sscce.org/)。 –

+0

根本不需要調用dispose()。 *如果你調用dispose(),它所做的就是釋放本地窗口句柄,節省一些內存。 – Durandal

回答

0

我認爲問題是,一旦你處理()一個對話框它有資格進行垃圾回收,所以在你能夠訪問對話框上顯示的文本字段中的文本之前,垃圾回收會發生。

我不認爲這會是一個問題,但爲了以防萬一,你可以重新排列你的代碼:

this.setVisible(true); 
VentanaConfigurarPrivilegios data = new Vent...(...); 
this.dispose(); 
return data; 
+1

這不是GC的工作原理。只要有對該對象的引用,該對象就不是GC'd。 – Darkhogg

+1

我同意@Darkhogg。所有的'dispose()'都是釋放* native *資源。而已。只要JDialog對象存在有效的引用,就可以查詢JDialog對象本身及其所有組件。 –

+0

感謝您的重新申請,最後一個問題,當我調用「dispose()」時,que變量「data」也被刪除? – user2928577