Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量一行不为null,下一行为null_Java_Netbeans_Nullpointerexception - Fatal编程技术网

Java 变量一行不为null,下一行为null

Java 变量一行不为null,下一行为null,java,netbeans,nullpointerexception,Java,Netbeans,Nullpointerexception,我目前通过Netbeans IDE用java编写的应用程序有问题。下面是我的代码以及部分错误消息 public DietUI(DietCntl theCreatingCntl){ theDietCntl = theCreatingCntl; double calories = DietCntl.getDietCntl().getDiet().theDiet.calories; double saturatedFat = DietCntl.getDietCntl().ge

我目前通过Netbeans IDE用java编写的应用程序有问题。下面是我的代码以及部分错误消息

   public DietUI(DietCntl theCreatingCntl){
   theDietCntl = theCreatingCntl;

   double calories = DietCntl.getDietCntl().getDiet().theDiet.calories;
   double saturatedFat = DietCntl.getDietCntl().getDiet().theDiet.saturatedFat;
   double polyunsaturatedFat = DietCntl.getDietCntl().getDiet().theDiet.polyunsaturatedFat;
   double transFat = DietCntl.getDietCntl().getDiet().theDiet.transFat;
   double totalFat = DietCntl.getDietCntl().getDiet().theDiet.totalFat;
   double cholesterol = DietCntl.getDietCntl().getDiet().theDiet.cholesterol;
   double sodium = DietCntl.getDietCntl().getDiet().theDiet.sodium;
   double potassium = DietCntl.getDietCntl().getDiet().theDiet.potassium;
   double dietaryFiber = DietCntl.getDietCntl().getDiet().theDiet.dietaryFiber;
   double sugar = DietCntl.getDietCntl().getDiet().theDiet.sugar;
   double totalCarbs = DietCntl.getDietCntl().getDiet().theDiet.totalCarbs;
   double protein = DietCntl.getDietCntl().getDiet().theDiet.protein;
   String name = DietCntl.getDietCntl().getDiet().theDiet.
name in Diet UI: Name Empty

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at healthbuddy.DietUI.<init>(DietUI.java:31)
at healthbuddy.DietCntl.<init>(DietCntl.java:21)
at healthbuddy.MainMenuCntl.getDietPlannerCntl(MainMenuCntl.java:39)
at healthbuddy.MainMenuUI$DietPlannerButtonListener.actionPerformed(MainMenuUI.java:79)
//System.out.println是第30行,DietUI.this.etc是第31行

   System.out.println("name in Diet UI: "+name);
   DietUI.this.nameTextField.setText(name);
//我的问题是第31行读取为空。第30行没有。Name在某一时刻用正确的值实例化,然后在下一时刻为null

   DietUI.this.cholesterolTextField.setText(String.valueOf(cholesterol));
   DietUI.this.dietaryFiberTextField.setText(String.valueOf(dietaryFiber));
   DietUI.this.caloriesTextField.setText(String.valueOf(calories));
   DietUI.this.polyunsaturatedFatTextField.setText(String.valueOf(polyunsaturatedFat));
   DietUI.this.transFatTextField.setText(String.valueOf(transFat));
   DietUI.this.potassiumTextField.setText(String.valueOf(potassium));
   DietUI.this.saturatedFatTextField.setText(String.valueOf(saturatedFat));
   DietUI.this.sodiumTextField.setText(String.valueOf(sodium));
   DietUI.this.proteinTextField.setText(String.valueOf(protein));
   DietUI.this.sugarTextField.setText(String.valueOf(sugar));
   DietUI.this.totalCarbsTextField.setText(String.valueOf(totalCarbs));
   DietUI.this.totalFatTextField.setText(String.valueOf(totalFat));

}
//下面是输出。它包含System.out.println(“饮食UI中的名称:“+name”);以及部分错误消息

   public DietUI(DietCntl theCreatingCntl){
   theDietCntl = theCreatingCntl;

   double calories = DietCntl.getDietCntl().getDiet().theDiet.calories;
   double saturatedFat = DietCntl.getDietCntl().getDiet().theDiet.saturatedFat;
   double polyunsaturatedFat = DietCntl.getDietCntl().getDiet().theDiet.polyunsaturatedFat;
   double transFat = DietCntl.getDietCntl().getDiet().theDiet.transFat;
   double totalFat = DietCntl.getDietCntl().getDiet().theDiet.totalFat;
   double cholesterol = DietCntl.getDietCntl().getDiet().theDiet.cholesterol;
   double sodium = DietCntl.getDietCntl().getDiet().theDiet.sodium;
   double potassium = DietCntl.getDietCntl().getDiet().theDiet.potassium;
   double dietaryFiber = DietCntl.getDietCntl().getDiet().theDiet.dietaryFiber;
   double sugar = DietCntl.getDietCntl().getDiet().theDiet.sugar;
   double totalCarbs = DietCntl.getDietCntl().getDiet().theDiet.totalCarbs;
   double protein = DietCntl.getDietCntl().getDiet().theDiet.protein;
   String name = DietCntl.getDietCntl().getDiet().theDiet.
name in Diet UI: Name Empty

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at healthbuddy.DietUI.<init>(DietUI.java:31)
at healthbuddy.DietCntl.<init>(DietCntl.java:21)
at healthbuddy.MainMenuCntl.getDietPlannerCntl(MainMenuCntl.java:39)
at healthbuddy.MainMenuUI$DietPlannerButtonListener.actionPerformed(MainMenuUI.java:79)
} }

目前,我已经设置了Diet对象,如果Diet对象是使用默认构造函数创建的,那么Diet的name属性将设置为“name Empty”。目前,DietUI的构造函数从Diet中提取值并将其放入变量中。然后将这些变量的值放在文本字段中,供用户编辑

在DietUI的第31行,从Diet类读取的my name属性明显为空,但在其正上方的行中,它显示为我通过System.out.println()期望的值;。我被这件事难住了。我不明白当下一行代码不改变变量的值时,变量怎么会变为null。我也加入了我的饮食课程,以防万一有什么东西给了我这个问题

任何帮助都将不胜感激。在这一周的大部分时间里,我一直在努力解决这个问题

编辑:我有点傻。我的所有GUI元素都设置为在initComponents方法中初始化,但我从未在构造函数中调用该方法。非常感谢您。

此代码:

System.out.println("name in Diet UI: "+name);
DietUI.this.nameTextField.setText(name);
不会做你认为它会做的事

第一行显示
name
变量不是null,但这不是导致NullPointerException的原因。问题是空值是
nameTextField
,而不是名称字符串。您可能尚未初始化任何GUI组件

例如,如果这是Swing,则必须执行以下操作:

// this must be done first
JTextField nameTextField = new JTextField();

// before you can set its text property like so:
nameTextField.setText(name);

编辑
您在评论中声明:

我相信我已经做到了。我使用了NetBeansGUI构建器,因此它为我实例化了它:nameTextField=newjavax.swing.JTextField()

您的JVM似乎在告诉您其他情况,但不要相信我的话,。。。。试试看!尝试:

System.out.println("name in Diet UI: "+name);
System.out.println("is nameTextField null?: " + (nameTextField == null));
让我们知道返回的内容


第31行是哪一行?如果你能把它简化成相关的代码,而且能把它变成一个完整的程序,那就真的很有帮助了。换句话说,减小程序的大小,直到它显示出问题为止(我猜您没有初始化
nameTextField
,但我们无法从您显示的代码中确定)。无需担心。我是个白痴。我所有的GUI内容都在initComponents()中初始化。我从未运行过init组件。非常感谢您,先生。@user2966511:您的JVM告诉您不是这样的。请参见编辑我的答案。在显示的位置尝试我的测试代码,并告诉我们返回什么。编辑:添加更多文本以进行编辑。我怀疑您的整个代码都关闭了,可能是因为在DietUI类中过度使用了静态变量。实际上,
DietUI.this.nameTextField
只是对实例字段的“正常引用”,但是,
DietUI.this
在这里完全不适用,如果您有一个非静态的内部类,这将是合适的(例如一个匿名的内部类),它需要访问外部类的一个变量。@skiwi:谢谢你的更正。我将相应地编辑我的答案!