gpt4 book ai didi

java - NullPointerException 试图在一个移动应用程序中添加 2 个 Displayables

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:34:05 30 4
gpt4 key购买 nike

我只是想弄清楚为什么会出错的逻辑。我第一次尝试在 1 个显示器中添加 2 个显示器,并使用 commandListener 切换 View 。我从逻辑上认为我做的一切都是正确的,但我得到了一个空指针异常。我从不想知道答案,我喜欢努力工作,所以也许如果有人可以问我一个关于我想要实现的目标的问题,这可以引导我使用你的线索或提示来思考答案。我们将不胜感激。

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class ClassApp extends MIDlet implements CommandListener {
private Display mydisplay;

private TextBox d;
private Alert alert;
private Command c,e,f,mNextCommand,l;
private List mList;

public ClassApp(){

alert = new Alert("Listen", "Do you really want to start this app?", null, null);
alert.setTimeout(Alert.FOREVER);

c = new Command("Exit", Command.EXIT, 2);
e = new Command("Back", Command.BACK, 0);
f = new Command("Alert", Command.SCREEN, 3);
mNextCommand = new Command("Next", Command.SCREEN, 4);
l = new Command("List", Command.SCREEN, 3);


d = new TextBox("ClassApp", "Commander", 20, TextField.ANY | TextField.PASSWORD);
d.addCommand(c);
d.addCommand(e);
d.addCommand(f);
d.addCommand(l);
d.setCommandListener(this);
mList.addCommand(mNextCommand);
mList.setCommandListener(this);


String[] stringElements = { "Airplane", "Car", "Hotel" };
Image[] imageElements = { loadImage("/airplane.png"),
loadImage("/car.png"), loadImage("/hotel.png") };

mList = new List("Reservation type", List.IMPLICIT,
stringElements, imageElements);




}
public void startApp()
{

mydisplay = Display.getDisplay(this);
mydisplay.setCurrent(d);

}
public void commandAction(Command j, Displayable s)
{
if(j == f)
mydisplay.setCurrent(alert);
if(j == l)
mydisplay.setCurrent(mList);
if (j == mNextCommand || j == List.SELECT_COMMAND) {
int index = mList.getSelectedIndex();
Alert alert2 = new Alert("Your selection",
"You chose " + mList.getString(index) + ".",
null, AlertType.INFO);
mydisplay = Display.getDisplay(this);
mydisplay.setCurrent(alert2, mList);
}

else if(j == c)
notifyDestroyed();
}





public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
private Image loadImage(String name) {
Image image = null;
try {
image = Image.createImage(name);
}
catch (IOException ioe) {
System.out.println(ioe);
}
return image;
}
}

我得到的错误是:

Starting emulator in execution mode
Installing suite from: http://127.0.0.1:2913/ClassApp.jad
java.lang.NullPointerException: 0
at ClassApp.<init>(ClassApp.java:33)
at java.lang.Class.newInstance(), bci=0
at com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
at com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
at com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=27
at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26

最佳答案

maybe if anyone can maybe ask me a question as to what I am trying to achieve that can lead me to think of the answer using your clues or hints...

好的,我们开始吧。

ClassApp.java:33错误消息的一部分告诉您 ClassApp.java 中的哪一行代码有问题。旁注神秘的部分 ClassApp.<init>告诉您 ClassApp 构造函数中发生了不好的事情。

如果从顶部数到第 33 行,您可能会发现:

    mList.addCommand(mNextCommand);

现在,如果您寻找方式 mList是在构造函数内部处理的(大约有 20 行要检查),您会发现一个有趣的事实,它会指导您找出哪里出了问题。


另一件值得记住的调查此类错误的事情是名称 NullPointerException显示在堆栈跟踪的顶部。它翻译成人类语言为

There is null value somewhere where it should not be.

这通常表示某些变量未正确分配您可能已经注意到


附言。

I'm going to continue to look for better efficiency (like moving the code into startapp)

正在 startApp 中初始化与其说是效率问题,不如说是可靠性问题。

建议在 startApp 中初始化一些东西而不是构造函数。例如在教程 MIDlet Life Cycle -> Execution States 中解释了这些: “通常,您将使用 startApp() 来分配记录存储、网络连接、UI 组件等...”

据我所知,对于保证在构造函数中安全初始化的内容,没有明确的列表。因此,我尝试在 startApp 中尽可能多地进行初始化。 - 这样一来,我就不需要为它是否安全而繁琐地检查规范了。

关于java - NullPointerException 试图在一个移动应用程序中添加 2 个 Displayables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232106/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com