2011-06-20 40 views
0

我想引用的setter引用一個動態的制定者......我收到的幫助和過早地選擇了答案解決問題之前....在這裏看到:Using a setter from outside a form?從動態類

所以,我這樣做是這樣的......數據進入日誌並被解析,然後返回到它所顯示的表單。

public class Log { 
    private MainForm mainForm; // our MainForm variable 

    public Log(MainForm mainForm) { 
     // setting the MainForm variable to the correct reference in its constructor 
     this.mainForm = mainForm; 
    } 

    private void consoleOut(String data) { 
    System.out.println(data); 
    if (mainForm != null) { 
     // now we can use the reference passed in. 
     mainForm.setConsoleText("data"); 
    } 
    } 
} 

這裏是我的表單中的setter。

public class MainForm extends FrameView { 
    public MainForm(SingleFrameApplication app) { 
     super(app); 
...........CUT FOR LENGTH................. 
    public void setConsoleText(String Text){ 
     jTextArea2.append(Text); 
    } 

爲簡單起見編輯。

由於某種原因,MainForm在Log類中總是出現null。

我怎樣才能得到我的主窗體的引用?

呃......我剛剛帶着一個靜態文本框和一個靜態設置器......還在尋找一個更好的主意。

回答

1

唯一的解釋是當你正在實例化Log時,你傳遞一個null給構造函數。您是否在 mainform被分配之前致電new Log(mainform)

// Don't do this 
private Log log = new Log(mainForm); 

private MainForm mainForm = new MainForm(); 

檢查對象的構造順序。