【问题标题】:Why am I getting NullPointerException in here? [duplicate]为什么我在这里得到 NullPointerException? [复制]
【发布时间】:2021-08-20 12:00:45
【问题描述】:

我制作了一个滑块 (brightSlider),我想将它添加到颜色选择器中。但我无法添加它,所以我希望它至少只在设置组 (SetupGroup) 处于打开状态时可见。

所以在draw(),我为此写了一个条件。但我得到空指针异常。当我不初始化对象时,我通常会收到此错误。但在这种情况下,我不知道如何初始化一个组。对于这个问题我能做些什么?

    import controlP5.*; //import ControlP5 library
    import processing.serial.*;
    
    Button button1;
    Group SetupGroup; //Should I somehow initialize this?

    void setup() { //Same as setup in arduino
    
      brightSlider = new BrightSlider(25,30,200,30,0,100); 

    Group SetupGroup = cp5.addGroup("SETUP")
    .setPosition(90,100)
    .setWidth(150)
    .setHeight(30)
    .setFont(font2);
//
//
//}

void draw() {  //Same as loop in arduino

 background(250);    // Setting the background to white

    if(mousePressed){
      brightSlider.checkPressed(mouseX,mouseY);
    }   

        if(SetupGroup.isOpen()){
        brightSlider.display();
        }
//
//
}

我只有在写if(SetupGroup.isOpen()) 行时才会收到此错误。

这是错误:

【问题讨论】:

  • 只是对未来问题的一个小改进:如果您在出现行号的地方显示堆栈跟踪,那么在显示的源代码中也有行号非常有帮助。并且随意将堆栈跟踪作为带有代码格式的文本包含在内...... :-)

标签: java processing processing-ide


【解决方案1】:
Group SetupGroup = cp5.addGroup("SETUP")
   .setPosition(90,100)
   .setWidth(150)
   .setHeight(30)
   .setFont(font2);

这声明了一个全新的变量,名为SetupGroup。然后该方法结束,因此,这个新的局部变量立即被丢弃。您名为 SetupGroup 的字段仍然为空。

只需删除前面的GroupType name; 正在声明一个新变量,您可以将Type name; name = ...; 快捷方式为Type name = ...;

name = ...; 为现有变量分配新值。

【讨论】:

    【解决方案2】:
    Group SetupGroup; //Should I somehow initialize this?
    

    是的!

    Java 中未初始化的字段(原语除外)等于null

    您的代码虽然尝试执行null.isOpen(),但因为null 基本上什么都没有,它没有任何方法。并且尝试在不存在的对象上执行方法会导致 NullPointerException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2016-11-17
      • 2020-07-31
      • 2021-11-08
      • 2016-11-22
      相关资源
      最近更新 更多