一两个星期以来,我一直在努力解决这个问题,但无法做到。

我有两个类,MyApplicationStore。这只是一个测试程序,用于查看我的存储代码出了什么问题。

这是MyApplication

public class MyApplication {
private Form current;
private Resources theme;
private Store o;

public void init(Object context) {
    theme = UIManager.initFirstTheme("/theme");
    Util.register("Store", Store.class);
    Toolbar.setGlobalToolbar(true);
}

public void start() {
    if(current != null){
        current.show();
        return;
    }

        Form hi = new Form("Hi World");

        TextField enter = new TextField("","Enter Here", 20, TextField.ANY);
        Button add = new Button("Add");

        add.addActionListener((ev)->
                o.add(enter.getText() + "", 100));  /*Failing here*/

        hi.add(enter).add(add);

        hi.show();

}

private void save()
{
    Storage.getInstance().writeObject("NameOfFile", o);
}

private void load()
{
    o = (Store) Storage.getInstance().readObject("NameOfFile");
}

public void stop() {
    current = Display.getInstance().getCurrent();
    if(current instanceof Dialog) {
        ((Dialog)current).dispose();
        current = Display.getInstance().getCurrent();
    }
}
public void destroy() {
}

}


这是Store

public class Store implements Externalizable {
private static final int VERSION = 1;
HashMap<String, Integer> data;

public void externalize(DataOutputStream out) throws IOException
{
    Util.writeObject(data, out);
}
public void internalize(int version, DataInputStream in) throws IOException
{
    data = (HashMap<String, Integer>)Util.readObject(in);
}
public void add(String s, Integer i)
{
    data.put(s, i);
}
public int getVersion()
{
    return VERSION;
}
public String getObjectId()
{
    return "Store";
}
}


我以前在MyApplication类中使用了哈希映射指针,但在同一位置失败了。

最佳答案

您发布的代码似乎没有在任何地方初始化data HashMap。您没有在调用load()方法,实际上也没有在任何地方创建Hashmap。因此,您突出显示的行可能会因NPE而失败。

将来,您不仅应包括“在这里失败”信息,还应包括更多信息。如果有堆栈跟踪,请始终提供。如果没有堆栈跟踪,那么您需要描述如何知道它在那里失败。

10-08 16:09