2011-03-01 85 views
0

我有後續代碼:http://aiids.pastebin.com/aLGYjraC我班的私有財產是空

的問題是在線84它給了我在programmaBesteller一個NullPointerException。當我調試時,每個私有成員(JMenu和JMenuItem)都是null:s。

我沒有看到這個問題,因爲我做新DefaultMenuBar() ...

+1

聽起來很奇怪。它在創建這個對象時是否有任何異常? – 2011-03-01 18:47:11

+0

否:s他會像他應該那樣調用構造函數,但是當我檢查對象時,所有私有成員都是null。 – 2011-03-01 18:57:38

+1

從哪裏調用'buildMenuProgramma'?超類?如果是這樣,那就是你的問題。 – justkt 2011-03-01 19:01:44

回答

1

下面是一些代碼,我想證明你所遇到的問題:

public abstract class Super { 

    public static void main(String[] args) { 
     new Sub(); 
    } 

    public Super() { 
     printMe(); 
    } 

    abstract void printMe(); 

    private static class Sub extends Super { 

     private final Object x = new Object(); 

     public Sub() { 
      super(); 
      printMe(); 
     } 

     @Override 
     protected void printMe() { 
      System.out.println("printMe: " + x); 
     } 
    } 
} 

輸出是:

printMe: null 
printMe: [email protected] 

即場x,這是明確的初始化,看起來不可能是null實際上在超類構造函數時沒有初始化。希望更清楚。

5

也許buildMenuProgramma方法是從父類的構造叫什麼名字?這些字段尚未在該階段實例化。

+0

我調用build()方法,該方法調用像buildMenuProgramma這樣的抽象方法。 – 2011-03-01 19:11:43

+0

你的粘貼代碼中沒有方法build()。除非在'super()'中調用'buildMenuProgramma',否則我看不到這些字段爲空的解釋。我們需要查看超類代碼以獲得更多幫助。 – 2011-03-01 19:19:11

+0

據我所知,'build()'方法實際上是從超類的構造函數調用的。如果是這樣,您可以簡單地創建另一個抽象方法來實例化所有私有成員,並在所有其他成員之前調用它。 – n0weak 2011-03-01 19:24:17