变量一行不为空,下一行不为空



我目前通过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.

//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("Diet UI中的名称:"+name);以及错误消息的一部分。

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)

//DietCntl类,只是为了以防万一。

public class DietCntl {
public static DietCntl theDietCntl;
private Diet theDiet;
public DietCntl(){
}
public DietCntl(int a){
    DietUI theDietUI = new DietUI(this);
}
public static DietCntl getDietCntl(){
    if(theDietCntl == null){
        theDietCntl = new DietCntl();
    }
    return theDietCntl;
}
public Diet getDiet(){
    if(theDiet == null){
        theDiet = new Diet();
    }
    return theDiet;
}
public void getMainMenuCntl(){
    MainMenuCntl theMMCntl = new MainMenuCntl();

}}

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

在DietUI中,第31行,从Diet类读取的my name属性显然是空的,但在它的正上方的行中,它显示为我通过System.out.println();期望的值。我被这个难住了。我不明白当下一行代码没有改变它的值时,变量如何变为null。我也包括了我的DietCntl类,以防有什么东西给我这个问题。

任何帮助都将非常感激。这一周的大部分时间我都在纠结这个问题。

编辑:我有点像个白痴。我所有的GUI元素都在initComponents方法中设置为初始化,但我从未在构造函数中调用该方法。感谢stackoverflow.

代码:

System.out.println("name in Diet UI: "+name);
DietUI.this.nameTextField.setText(name);

不像你想象的那样。

第一行显示name变量不为空,但是,这不是导致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);

编辑
你在注释中声明:

我相信我已经做到了。我使用Netbeans GUI构建器,所以它为我实例化它:nameTextField = new javax.swing.JTextField()

您的JVM似乎在告诉您其他情况,但不要相信我的话,....测试它!试一试:

System.out.println("name in Diet UI: "+name);
System.out.println("is nameTextField null?: " + (nameTextField == null));

,让我们知道返回的是什么。


相关内容

  • 没有找到相关文章

最新更新