2011-03-01 62 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