2011-06-24 55 views
1

我必須在兩個班級共享一個String[]。一個類設置數組,另一個獲取數組。我做了四堂課。一個包含超類級別的數組,並且該數組在子類中進行訪問。一個班級在這裏擁有main()共享兩個班級的數據

ApplicationDataPool.java

public class ApplicationDataPool extends JFrame { 
    String[] thisContact; 

    public ApplicationDataPool() { 
     super("Update Record"); 
    } 

    public String[] getThisContact() { 
     return thisContact; 
    } 

    public void setThisContact(String[] thisContact) { 
     this.thisContact = thisContact; 
    } 


} 

UpdateProcessStepOneFrame.java

public class UpdateProcessStepOneFrame extends ApplicationDataPool { 

     public UpdateProcessStepOneFrame() { 
      String[] something = { "fname", "lname" }; 
      setThisContact(something); 
      UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame(); 
      step2.setVisible(true); 
     } 

    } 

UpdateProcessStepTwoFrame.java

public class UpdateProcessStepTwoFrame extends ApplicationDataPool{ 

    public UpdateProcessStepTwoFrame(){ 
    String[] theContact = getThisContact(); 
    //Here is the problem   
    //Exception in thread "main" java.lang.NullPointerException 
     System.out.println(theContact.length); 
    } 

} 

問題:每當我訪問數組的任何地方的Java拋出一個NullPointerException。這是爲什麼發生。我該如何糾正它?

回答

3

thisContact變量是UpdateProcessStepOneFrameUpdateProcessStepTwoFrame你所創建的實例所擁有。如果您想在ApplicationDataPool的所有實例之間共享thisContact,則必須將其定義爲static。這意味着變量將由類擁有而不是其實例。

protected static String[] thisContact; 
+0

非常簡單,並增加了我對跨類共享數據的理解。謝謝。 – prometheuspk

+0

我也跟你說過一樣:) – Cris

0

有兩種不同類型的...所以的String [] theContact將在第二類,除非你將其設置爲空...

+0

theContact也不是一成不變在相同類別的實例之間共享 – Cris

1

的類UpdateProcessStepOneFrameUpdateProcessStepTwoFrame不知道對方的存在,所以你需要在UpdateProcessStepTwoFrame類中做setThisContact(something)以使getThisContact不爲空。

0

第一次調用

setThisContact(something); 

設置陣列用於UpdateProcessStepOneFrame對象(通過基類)的集合。

然後,當您執行這一點:

UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame(); 

要創建有自己單獨的數組,這是從來沒有初始化,因此一個新的對象上拋出一個theContact.length NPE