Java 这个NullPointerException是什么意思?

Java 这个NullPointerException是什么意思?,java,nullpointerexception,jmonkeyengine,Java,Nullpointerexception,Jmonkeyengine,这段代码给了我一个java.lang.NullPointerException,我不知道为什么。 确切错误: java.lang.NullPointerException at com.bminus.ttp.controller.HUD.bind(HUD.java:35) at de.lessvoid.nifty.screen.Screen.startScreen(Screen.java:210) at de.lessvoid.nifty.Nifty.gotoScreen

这段代码给了我一个java.lang.NullPointerException,我不知道为什么。 确切错误:

java.lang.NullPointerException
    at com.bminus.ttp.controller.HUD.bind(HUD.java:35)
    at de.lessvoid.nifty.screen.Screen.startScreen(Screen.java:210)
    at de.lessvoid.nifty.Nifty.gotoScreenInternal(Nifty.java:678)
    at de.lessvoid.nifty.Nifty.access$400(Nifty.java:77)
    at de.lessvoid.nifty.Nifty$1.perform(Nifty.java:635)
    at de.lessvoid.nifty.elements.EndOfFrameElementAction.perform(EndOfFrameElementAction.java:22)
    at de.lessvoid.nifty.Nifty.executeEndOfFrameElementActions(Nifty.java:439)
    at de.lessvoid.nifty.Nifty.handleDynamicElements(Nifty.java:358)
    at de.lessvoid.nifty.Nifty.update(Nifty.java:293)
    at com.jme3.niftygui.InputSystemJme.endInput(InputSystemJme.java:113)
    at com.jme3.input.InputManager.processQueue(InputManager.java:819)
    at com.jme3.input.InputManager.update(InputManager.java:883)
    at com.jme3.app.Application.update(Application.java:604)
    at com.bminus.ttp.ui.App.update(App.java:473)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
    at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:185)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:228)
    at java.lang.Thread.run(Thread.java:744)
下面是它指向的代码:

public void bind(Nifty theNifty, Screen theScreen)
  {
    this.nifty = theNifty;
    this.screen = theScreen;
    this.screen.addKeyboardInputHandler(new DefaultInputMapping(), this);
    final ConsoleControl control = (ConsoleControl)this.nifty.createPopup("console-popup").findControl("console", ConsoleControl.class);
    control.output("The Third Power");
    control.output("Type 'help()' to get list of all available commands.");
    control.addCommandHandler(new ConsoleCommandHandler()
    {
       public void execute(String theString)
      {
        try
        {
          Object result = HUD.SHELL.evaluate(String.format("TTP.%s", new Object[] { theString }));
          if (result != null) {
            if ((result instanceof Collection)) {
              for (Object resultItems : (Collection)result) {
                control.output(resultItems.toString());
              }
            } else {
              control.output(result.toString());
            }
          }
        }
        catch (Exception exception)
        {
          control.output(String.format("Unknown command: %s", new Object[] { theString }));
        }
      }
    });
    SHELL.setVariable("TTP", this.consoleAPI);
  }
更具体地说,这一行:

control.output("The Third Power");

我想知道的是为什么它会给我一个java.lang.NullPointerException,以及我如何修复这个错误,以及如何确保它永远不会回来。如果有人需要更多关于我想要什么的信息,那就问吧。谢谢大家!

变量
control
null
,您试图对其调用方法
output()
。在尝试调用方法之前,您可能需要在
if
语句中检查它是否为
null
。如果您不希望它是
null
,请尝试查看前一行返回
null
的原因

final ConsoleControl control = (ConsoleControl)this.nifty.createPopup("console-popup").findControl("console", ConsoleControl.class);

变量
control
null
,您试图对其调用方法
output()
。在尝试调用方法之前,您可能需要在
if
语句中检查它是否为
null
。如果您不希望它是
null
,请尝试查看前一行返回
null
的原因

final ConsoleControl control = (ConsoleControl)this.nifty.createPopup("console-popup").findControl("console", ConsoleControl.class);

检查是否有
最终控制台控制…
返回空值


您可以添加语句
if(control==null){System.out.println(“我发现了问题,现在我必须找出控件为null的原因);}

检查
最终控制台控件是否…
返回空值


如果(control==null){System.out.println(“我发现了问题,现在我必须弄清楚为什么控件为null);}

您的代码中,可以添加语句
,如果(control==null){System.out.println(“我发现了问题,现在我必须弄清楚为什么控件为null);}

,则findControl方法返回null,这会导致控件为null时出现null指针异常。只是胡乱猜测,如果不正确,请忽略这一点。您希望在findControl方法中传递“console”,还是应该与“console popup”相同。有时我们会输入错误,并朝不同的方向看

无论如何,为了完成答案,您可以在调用find Control方法之后添加这一行

final ConsoleControl control = (ConsoleControl)this.nifty.createPopup("console-popup").findControl("console", ConsoleControl.class);
if(control == null){
//log error message if want
return;
}

从您的代码中,findControl方法正在返回null,这导致此nullpointer异常,因为它使控件为null。只是胡乱猜测,如果不正确,请忽略这一点。您希望在findControl方法中传递“console”,还是应该与“console popup”相同。有时我们会输入错误,并朝不同的方向看

无论如何,为了完成答案,您可以在调用find Control方法之后添加这一行

final ConsoleControl control = (ConsoleControl)this.nifty.createPopup("console-popup").findControl("console", ConsoleControl.class);
if(control == null){
//log error message if want
return;
}


您在Eclipse中尝试过调试模式吗?如果没有,您可能需要下载Eclipse集成开发环境。。它将为您提供相当多的故障排除(和写作)帮助!这意味着你试图用一个不存在的物体做一些事情。也许它从未被实例化过。我正在使用jMonkey引擎(NetBeans),我必须坚持使用它@Erstwhilelll@leigero我该怎么做?您在Eclipse中尝试过调试模式吗?如果没有,您可能需要下载Eclipse集成开发环境。。它将为您提供相当多的故障排除(和写作)帮助!这意味着你试图用一个不存在的物体做一些事情。也许它从未被实例化过。我正在使用jMonkey引擎(NetBeans),我必须坚持使用它@Erstwhilelll@leigero我该怎么做?这可能有点不着边际,但为什么它会返回null,我该如何检查它是否返回null?错误堆栈显示com.bminus.ttp.controller.HUD.bind(HUD.java:35)。检查是否是同一行。这是他指定的行下面的行@拉文德雷耶。第
34行
导致
control
变量的
null
输出。因此,NPE位于
35
。我真的不知道您使用的这个API。我相信你的话,HUD.java第35行是你在文章中提到的
control.output(…)
行。这意味着您调用的
findControl()
方法正在返回
null
。我会查阅该方法的API文档,但我怀疑它找不到任何类型为
ConsoleControl.class
的名为“console”的控件。这可能有点不对劲,但为什么它会返回null,我该如何检查它是否返回null呢?错误堆栈显示com.bminus.ttp.controller.HUD.bind(HUD.java:35)。检查是否是同一行。这是他指定的行下面的行@拉文德雷耶。第
34行
导致
control
变量的
null
输出。因此,NPE位于
35
。我真的不知道您使用的这个API。我相信你的话,HUD.java第35行是你在文章中提到的
control.output(…)
行。这意味着您调用的
findControl()
方法正在返回
null
。我会查阅该方法的API文档,但我怀疑它找不到任何类型为
ConsoleControl.class
的名为“console”的控件,现在我将在nifty项目中完成ConsoleControl.class时执行此操作。谢谢在我完成漂亮项目中的consoleControl.class时,我现在要做这件事。谢谢