Iveはストレージシステムをより深く見ていましたが、正しく動作させることができませんでした。データが保存されているようですが、保存されたデータは間違いなく空ではなく、まだjava.lang.NullPointerExceptionが発生しています。ストレージからのトラブルシューティング
私のクラスは保存しておき、後で記憶装置に読み込みます。
バンドは、名前とジャンルを持つ簡単なクラスです。
public class Band implements Externalizable{
String name;
String genre;
public Band(String bnd, String gen){
this.name = bnd;
this.genre = gen;
}
public Band() {
}
public String getName(){
return this.name;
}
public String getGenre() { return this.genre; }
public void setName(String name) {
this.name = name;
}
public void setGenre(String genre) {
this.genre = genre;
}
@Override
public String toString(){
String s;
s = this.name;
return s;
}
public int getVersion(){
return 1;
}
@Override
public void externalize(DataOutputStream out) throws IOException {
Util.writeUTF(name, out);
Util.writeUTF(genre, out);
}
@Override
public void internalize(int version, DataInputStream in) throws IOException {
name = Util.readUTF(in);
genre = Util.readUTF(in);
}
public String getObjectId(){
return "Band";
}
}
バンドリストは、バンドが追加されたArrayListを持つ単なるクラスです。
public class BandList implements Externalizable{
List <Band> bandList;
public List getBandList(){
return this.bandList;
}
public BandList(){
bandList = new ArrayList<Band>();
}
public void setBandList(List<Band> bandList) {
this.bandList = bandList;
}
public int getVersion(){
return 1;
}
@Override
public void externalize(DataOutputStream out) throws IOException {
Util.writeObject(bandList, out);
}
@Override
public void internalize(int version, DataInputStream in) throws IOException {
bandList = (ArrayList<Band>) Util.readObject(in);
}
public String getObjectId(){
return "BandList";
}
}
したがって、ユーザは、いくつかのテキストフィールド内に充填されたいくつかの他のクラスでは、バンドは、バンドリストに追加され、したがって、私はsaveListsToStorage()を呼び出します。アプリケーションの起動時にアプリケーションがストレージ内のデータを探している
public void saveListsToStorage(){
Storage.getInstance().clearStorage();
Storage.getInstance().writeObject("Bands", bandList);
}
だから今、見つかった場合は、それはそれ以外の場合は、新たなバンドリストオブジェクトを返しますが、保存されたバンドリストオブジェクトを返します。
その前に、私は
Util.register("Band", Band.class);
Util.register("BandList", BandList.class);
でクラスの会員登録をし、最終的に先頭でメインでこのメソッドを呼び出します。保存した後
public BandList loadSavedBandList() {
String[] temp = Storage.getInstance().listEntries();
for (String s : temp) {
if (s.equals("Bands") == true) {
BandList tempBand = (BandList) Storage.getInstance().readObject("Bands");
return tempBand;
}
}
return new BandList();
}
をしてからロードし、それはにNullPointer例外をスローし、I理由を知りません。私はShaiが私に言ったようにLinkedListの代わりにArrayListを使用しました。ガイドで説明したようにExternalizable Interfaceを実装しました。
多分あなたの何人かがここで何が間違っているか教えてくれるかもしれません。
編集:ここでは
は例外です:
java.lang.NullPointerException
at com.rosscode.gehma.Menu_Form.updateBandContainer(Menu_Form.java:95)
at com.rosscode.gehma.Menu_Form.<init>(Menu_Form.java:73)
at com.rosscode.gehma.main.start(main.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.codename1.impl.javase.Executor$1$1.run(Executor.java:106)
at com.codename1.ui.Display.processSerialCalls(Display.java:1152)
at com.codename1.ui.Display.mainEDTLoop(Display.java:969)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
編集2、ライン95:
if(bandList.getBandList().isEmpty() == false) {
for (int i = 0; i < bandList.getBandList().size(); i++) {
Button temp = new Button(bandList.getBandList().get(i).toString());
temp.addActionListener((e) ->
nextStep()
);
listCont.add(temp);
}
menuForm.revalidate();
}
コンソールからNullPointerExcepitonスタックを除いてすべてが含まれています。あなたはあなたの投稿を編集してそれを含めて、ここにコメントを投稿することができますので、私はあなたが変更を行ったのを見るでしょうか? –
こんにちは、私は例外スタックを追加しました。 updateBandContainer()メソッドでは、Band Listを反復処理してBandsContainerを更新し、各バンドをButtonとして追加します。 –
コードは何ですか、特に95行ですか? –