2016-01-23 110 views
1

問題:爲什麼字符串name始終爲空?JDialog的方法返回null

這是我在我的課創建對話框Add

public void init(){ 
    try { 
     Add dialog = new Add(); 
     dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     //dialog.add(comp) 
     dialog.setModal(true) ; 
     //dialog.setModalityType(dialog.DEFAULT_MODALITY_TYPE); 
     dialog.setVisible(true); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

在這裏,我得到了用戶的價值:

public void actionPerformed(ActionEvent arg0) { 
    name = textField.getText(); 
    System.out.println(name); 
    setVisible(false); 
} 

的方法,從另一個類獲取用戶的價值:

public String Get(){ 
    return name; 
} 

在這裏我嘗試使用該值,但name總是null

Add l = new Add(); 
l.init(); 
String name = l.Get(); 
+0

你註冊了用戶操作的監聽器嗎?如果是,你是在事件之後還是在事件之前檢查該字符串? – SMA

+0

是的(實際上是一個確定的按鈕),我在事件後檢查字符串 – Streetakos

+1

發佈一個**完整的**最小的例子來重現問題。您的最後一個片段與您的第一個片段相矛盾:第一個片段顯示創建並顯示一個對話框,您創建一個Add實例,然後使其成爲模態,然後可見。而最後一個顯示你創建一個Add,調用它的init()方法。如果init()方法是第一個代碼片段中的方法,那麼您使用Add來創建**另一個** Add。爲什麼? –

回答

1

問題您創建Add例如兩次。刪除Add dialog = new Add();init()方法,它會工作。

public void init(){ 
    try { 
     this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     //dialog.add(comp) 
     this.setModal(true) ; 
     //dialog.setModalityType(dialog.DEFAULT_MODALITY_TYPE); 
     this.setVisible(true); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}