【问题标题】:Java - creating Array of JPanel makes null pointer exceptionJava - 创建 JPanel 数组会导致空指针异常
【发布时间】:2012-10-21 16:39:46
【问题描述】:

我正在尝试创建一个 jpanels 数组,但我得到了一些 null pointer exception

这里是代码的一部分。这里的cartPpanel

JPanel[] p2 = new JPanel[10];
    p2[0].setPreferredSize(new Dimension(700, 40));
    p2[0].setMaximumSize(p2[0].getPreferredSize());
    p2[0].setLayout(new GridLayout(1,5,1,1));
    p2[0].add(new JLabel("text"));
    p2[0].add(new JLabel("text"));
    p2[0].add(new JLabel("text"));
    p2[0].add(new JLabel("text"));
    p2[0].setBackground(Color.CYAN);

    cartP.add(p2[0]);

我会用它来制作一个视图购物车,就像在购物网站上一样。

这里是个例外..

Exception in thread "main" java.lang.NullPointerException
at storeapp.Cart.gui(Cart.java:59)
at storeapp.Cart.<init>(Cart.java:29)
at storeapp.Cart.main(Cart.java:157)

Java 结果:1

知道为什么我会得到那个异常吗?

【问题讨论】:

    标签: java arrays nullpointerexception jpanel


    【解决方案1】:

    因为

    JPanel[] p2 = new JPanel[10];
    

    创建一个null JPanel 指针数组。使用前需要对数组的每个元素进行初始化。

    for (int i=0; i<p2.length; i++) {
        p2[i] = new JPanel(/* snip */);
    }
    

    这与 any 数组初始化的行为一致。除非另有分配,否则数组元素具有数组类型的默认值; for any object type, the default value is null.

    【讨论】:

      【解决方案2】:

      你必须用这样的东西来初始化每个 JPanel::

      for(int i = 0; i < 10; i++){
         p2[i] = new JPanel();
      }
      

      对象数组和原始类型数组的行为方式不同。

      虽然intfloat 等数组类型的元素不需要在new 的堆上创建,但您必须初始化对象数组。

      JPanel[] panels = new JPanel[10] 为 JPanel 创建 10 个 UNINITIALIZED 对象(或者只是初始化数组)。由于它们没有被初始化,你必须在每个 JPanel 上调用 new 来分别初始化它们。

      【讨论】:

      • "...creates 10 UNINITIALIZED objects" 是一个误导性的句子。没有“未初始化对象”之类的东西,只有尚未初始化的变量和引用。说“在[a] JPanel上调用new”也是误导/不正确的。您没有调用方法,也没有将运算符应用于现有对象。
      【解决方案3】:
      JPanel[] p2 = new JPanel[10];
      
      for (int i = 0; i < p2.length; i++){
          p2[i] = new JPanel();
      }
      

      ....

      你的代码

      【讨论】:

      • 您也可以添加一些信息。为什么以及在哪里进行这些更改?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2014-08-02
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多