2014-01-25 78 views
0

我試圖在使用GUI的Java中創建我的第一個程序,並且出現小問題。我使用NetBeans創建了一個窗口,現在我創建了兩個類 - 一個叫做GUI,它將控制我的窗口,當然還有Main。在Java中使用GUI執行程序期間出現NullPointerException

這裏有兩個代碼:

GUI:

package client; 

import resources.gui.*; 

public class GUI { 
    public Window window; 
    public GUI(){ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       window=new Window(); 
       window.setVisible(true); 
      } 
     }); 
    } 
    public void Show(){ 
     window.jTextArea1.setText("Test"); 
    } 
} 

主營:

package client; 

public class Main { 

    static GUI gui; 
    public static void main(String[] args) { 
     gui=new GUI(); 
     gui.Show(); 
    } 
} 

當然還有是一個擴展JFrame的另一個名爲窗口。

我的問題是,在執行它的時候,有一行java.lang.NullPointerException試圖修改jTextArea1。我想這是因爲當程序試圖使用這個函數時,沒有Window類 - 它還沒有被創建「,這要歸功於」invokeLater「。

如果我是正確的,我該如何修復它?沒有辦法將該函數放入run()中,因爲在最終版本中它不會是一個函數 - 它將是Thread獨立於GUI的類,它將在Main中創建和執行...或者至少我希望它就是這樣。 :)

+0

你在哪裏創建JTextArea1?如果你不創造它,你期望它存在嗎?它是空的,因此你得到NullPointerException(因爲程序試圖調用null對象上的setText方法)。 –

回答

0

問題不是Window類。

您不實例化jTextArea1。它是一個空值(一個空指針;因爲對象的變量名實際上是指針)。

如果要修改代碼,展開出像這樣,這將告訴你在哪裏的錯誤是:

JTextArea myTextArea = window.jTextArea1; 
myTextArea.setText("Test"); 

當然,因爲這仍然是斷開的,這不正是你想。你想創建JTextArea(並且有ample examples online)。