2

私は得ています

Exception in thread "main" java.lang.NullPointerException
    at java.io.FileOutputStream.<init>(FileOutputStream.java:201)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:99)
    at lib.Entry.serialize(Entry.java:17)
    at main.Main.main(Main.java:8)

どこですかEntry.java:17stream.writeObject(this);下記参照)

Entry.java

package lib;
import java.io.*;

public class Entry { // Superclass.

    String filename; // Set below.
    String name; // Set by the subclass.

    public void main() {
        this.filename = this.name + ".ser";
        serialize();
    }

    public void serialize() {           
        try {
            FileOutputStream file = new FileOutputStream(this.filename);
            ObjectOutputStream stream = new ObjectOutputStream(file);
            stream.writeObject(this);
            stream.close();
            file.close();
            System.out.println("Serialized.");
        } catch(IOException e) {
            e.printStackTrace();
        }
    }

}

Place.java

package lib;

public class Place extends lib.Entry { // A subclass.

    public String name;

    public Place(String name) {
        this.name = name;
    }

}

Main.java

package main;
import lib.Place;

public abstract class Main {

    public static void main(String[] args) {
        Place room = new Place("room");
        room.serialize();
    }

}

NullPointerExceptionを使用すると が表示されるのはなぜthisですか? 現在のオブジェクト インスタンスを に書き込もうとしていますObjectOutputStream。私はJavaが初めてで、どうすればよいかわかりません。Python では、Java で使用しstream.writeObject(self)たのと同じ考え方で、そのようなものを使用thisします。を使ってみstream.writeObject(Object this);ましたが、うまくいきませんでした。私も試しました

Object p = this;
stream.writeObject(p);

これは同じことだと思います。それもうまくいきませんでした。Placeアイデアは、 を拡張する( 以外の) より多くのクラスを持ち、メソッドEntryを使用してシリアル化できるようにすることです。Entry.serialize()

4

2 に答える 2