【问题标题】:How to create a file to store an Objects from an ArrayList Java如何创建文件以存储来自 ArrayList Java 的对象
【发布时间】:2014-04-06 07:40:15
【问题描述】:

我正在制作一个基本上是 2D minecraft 的游戏,并且我正在为每个块(X、Y、对象类型)创建一个具有 3 个参数的新对象。游戏本身可以运行,但是我无法保存它,因为每次我使用保存功能时它都会崩溃。 (java.io.NotSerializableException) - 为什么不呢???
所以这里我有我的数组列表,它存储对象:

    public static ArrayList<Objects> list = new ArrayList<Objects>();

这是我的名为 Objects 的类:

public class Objects{

public int ObjectX;
public int ObjectY;
public int ObjectName;
public int ObjectSize = Game.ObjectSize;

public Objects(int x, int y, int n) {
    ObjectX=x;
    ObjectY=y;
    ObjectName=n;
}

public void render(Graphics g){ 
    if(ObjectX*ObjectSize-Game.x+ObjectSize > 0 && ObjectX*ObjectSize-Game.x <     Game.w && ObjectY*ObjectSize-Game.y+ObjectSize > 0 && ObjectY*ObjectSize-Game.y < Game.h){       
        if(ObjectName!=1){  
    g.setColor(Color.BLACK);
    g.fillRect(ObjectX*ObjectSize-Game.x, ObjectY*ObjectSize-Game.y,ObjectSize,ObjectSize);
        }
        if(ObjectName==2){
    g.setColor(Color.GREEN);
    g.fillRect(ObjectX*ObjectSize +1-Game.x, ObjectY*ObjectSize +1-Game.y,ObjectSize-2,ObjectSize-2);
        }
        if(ObjectName==3){
    g.setColor(new Color(139,69,19));
    g.fillRect(ObjectX*ObjectSize +1-Game.x, ObjectY*ObjectSize +1-Game.y,ObjectSize-2,ObjectSize-2);
        }
    }
}

public void tick(){

}
}

所以我尝试了一些东西,但是我不能让它工作???我真的需要一些帮助。

//write
public void save(String filename) throws FileNotFoundException {
    doing = "Saving...";
    try{
        File file = new File(filename);
        if(!file.exists()) {
            file.createNewFile();
        } 
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(list);
oos.close();
    }catch(IOException e){
        e.printStackTrace();
    }
    SAVE=false;
}

【问题讨论】:

  • 如果您要询问有关代码抛出异常的问题,将堆栈跟踪包含在您的问题中会很有帮助。
  • java.io.NotSerializableException - 这是我得到的错误

标签: java file arraylist


【解决方案1】:

假设我想将Foo 的实例写入文件。我需要让Foo 实现Serializable,像这样:

public class Foo implements Serializable {}

如果Foo 是可序列化的,那么Foo 中的每个对象都必须是可序列化的。如果Foo 包含BarBar 也必须实现Serializable。如果Bar 包含ArrayList&lt;Baz&gt;,则Baz 必须是可序列化的。 ArrayList 已经可以序列化了,所以你不用担心。

请注意,您实际上不必为可序列化的对象执行任何操作。你只需要用正确的接口标记它。

【讨论】:

  • THX :D 它现在可以工作了——我在我的类中实现了 Serializable 我正在创建文件,但不是 Objects 类。所以谢谢。
猜你喜欢
  • 2013-03-03
  • 2020-03-21
  • 2017-08-12
  • 2014-04-13
  • 2014-06-17
  • 2015-05-04
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多