0

所以我一直在研究我的程序,第一次在 java 中使用 GUI。我认为我拥有应有的一切,但给了我一个错误:

Exception in thread "main" java.lang.NullPointerException
    at GUIProgram.<init>(GUIProgram.java:41)
    at Inventory.main(Inventory.java:12)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

我不知道我到底要做什么,我一直在努力解决它,但我做不到。

如果您需要更多信息来找出问题所在,请告诉我。

编辑(从评论复制)

Product[] array = new Product[table.length]; 
float total = 0; float fee = 0; 
for(Product p: array) { 
  total += p.getTotal(); 
  fee += p.getRestockingFee();
}

这是我正在构建的 GUIProgram 类。

    import javax.swing.*;
import java.awt.*;

public class GUIProgram extends JFrame
{

     public GUIProgram()
     {
        super("Welcome to the Inventory Program");

        setLayout(new FlowLayout());

        String[] columnNames = {"Item", "Item No.", "Unit", "Price"};


        Product[] table = new Product[5];

        table[0] = new Product("chocolate", 1023, 124, 1.50f);
        table[1] = new Product("ice cream", 1543, 170, 3.35f);
        table[2] = new Product("milk", 1265, 230, 2.40f);
        table[3] = new Product("orange juice", 1653, 199, 0.60f);
        table[4] = new Product("cereal", 1534, 176, 3.50f);

        for (int i = 0; i < table.length; i++)
        {
         JTextField textfield1 = new JTextField(table.length);
         add(textfield1);

           float total = 0;
           float fee = 0;

           for(Product p: table)
           {
                 total += p.getTotal();
                 fee += p.getRestockingFee();

            }

           JTextField textfield2 = new JTextField(table.length);
           textfield2 = new JTextField(String.format("The total value of the Fruits Inventory is: %.2f", total));
           add(textfield2);

           JTextField textfield3 = new JTextField(table.length);
           textfield3 = new JTextField(String.format("The total restocking fee is: %.2f", fee));
           add(textfield3);
         }     
     }  
}

我只是想为这个数组构建一个 GUI。

4

2 回答 2

2

它说有一个名为 的源文件GUIProgram.java,它的第 41 行在null引用 上有一些方法调用

经过

Product[] array = new Product[table.length]; 

您声明您将拥有一个 Product 数组,并且您现在有空间用于数组中的 table.lengh 产品引用

所有这些引用仍然存在null,您需要初始化每个产品

并这样做

for(Product p: array) { 
  // initialization
  p = new Product();
  total += p.getTotal(); 
  fee += p.getRestockingFee();
}
于 2013-08-04T01:02:35.880 回答
1

看起来您在初始化之前在构造函数中使用了一个变量。

随机示例:

Button runButton; //declared, but not initialized
button.SetColor(0, 0, 0); //calling the SetColor method on the uninitialized variable will cause it to go bang and give you a NullPointerException
于 2013-08-04T01:08:47.300 回答