当前位置: 首页 > 知识库问答 >
问题:

Java-NotSerializableException(保存对象)

阎晗日
2023-03-14

所以今天我正在为Minecraft服务器开发一个插件。为此,我创建了一个“Track”类,它表示一条赛车道。为了存储所有现有的轨道与他们的数据,我想保存整个轨道对象,这使一切对我更容易。总之,我在我的Track类中实现了Serializable,以便稍后使用ObjectOutputStream。当我开始保存轨迹时,Java创建了一个对象文件,但它也会给我一个警告/错误:

14:19:00][服务器线程/warn]:java.io.notSerializableException:org.bukkit.craftBukkit.v1_8_r2.craftWorld[14:19:00][服务器线程/warn]:at java.io.objectOutputStream.writeObjectOutputStream.writeObject0(objectOutputStream.java:1184)[14:19:00][服务器线程/warn]:at 19:00][服务器线程/warn]:at java.io.objectoutputstream.writeordinaryObjectoutputstream.java:1432)[14:19:00][服务器线程/warn]:at java.io.objectoutputstream.writeObject0(Objectoutputstream.java:1178)[14:19:00][服务器线程/warn]:at java.io.objectoutputstream.writeObject0(objectoutputstream.java:348)[14:19:00][服务器线程.speedrunners.main.ondisable(main.java:48)[14:19:00][服务器线程/warn]:在org.bukkit.plugin.java.javaplugin.setenabled(javaplugin.java:323)[14:19:00][服务器线程/warn]:at org.bukkit.plugin.java.java.javaPluginLoader.disablePlugin(javaPluginLoader.java:359)[14:19:00][服务器线程/warn]:at org.bukkit.plugin.simplePluginManager.disablePlugin(javaPluginLoader.java:359)[14:19:00][服务器线程/warn]:at org.bukkit.craftbukkit.v1_8_r2.craftserver.disablePlugins(CraftServer.java:335)[14:19:00][Server Thread/warn]:at net.minecraft.Server.v1_8_r2.minecraftServer.stop(MinecraftServer.javer:458)[14:19:00][Server Thread/warn]:at net.minecraft.Server.v1_8_r2.minecraftServer.run(MinecraftServer.java:590)[14:19:00][Server Thread/warn]:at

这是我的田径课的一部分。我注意到eclipse警告我track类没有声明最终的静态serialVersionUID字段。我试图实现默认值并生成serialVersionUID,但没有帮助:

import java.io.Serializable;
import java.util.ArrayList;

import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;

public class Track implements Serializable {

private int playerSize;

private String name;
private World world;
private ArrayList<Player> players;
private Location spawn;

private Sign sign;
private Material finishBlocks;
private Material speedBlocks;

public Track(World world, String name, int playerSize) {
    this.world = world;
    this.name = name; 
    this.playerSize = playerSize;
    this.players = new ArrayList<Player>();
}
//and so on.....

现在,下面是我保存track对象的代码片段:

private void saveTracks() {
    FileOutputStream outputStream = null;
    ObjectOutputStream objectOutput = null;
    try {
        File directory = new File("tracks");
        if(!directory.exists()) directory.mkdir();
        for(Track track : tracks) {
            outputStream = new FileOutputStream("tracks/" + track.getName() + ".ser");
            objectOutput = new ObjectOutputStream(outputStream);
            objectOutput.writeObject(track);
        }
    }
    catch (IOException e) {
          e.printStackTrace();
    }
    finally {
          if (objectOutput != null) try { objectOutput.close(); } catch (IOException e) {}
          if (outputStream != null) try { outputStream.close(); } catch (IOException e) {}
    }
}

就像我说的,Java创建对象,所以它有点工作。但我不知道如何摆脱警告。

谢谢你的帮助

共有1个答案

家弘业
2023-03-14

当要求实例具有可序列化接口时引发。序列化运行库或实例的类可以引发此异常。参数应该是类的名称。

 类似资料:
  • 有人能告诉我5美元是什么意思吗?这个例外究竟说明了什么?

  • 我正在构建一个java国际象棋游戏,并试图构建它的GUI部分。GUI板是完整的,我可以在板上设置碎片。我不是简单地将图像设置为块,而是希望能够设置一个接受颜色和图像的Rook类的新实例化。我需要JLabel块来完成这一操作,因此在后面的代码中,我可以添加一些方法,使Rook遵守turn-take和move规则。 据我所知,JLabel只能保存图像或文本,因此我认为这可能是不可能的。如有任何帮助,我

  • 问题内容: 我试图使用对象输出流将我制作的对象写入文件,并且每当我运行代码时,它就会引发NotSerializableException。请告诉我您是否明白我做错了。 保存方法: 错误输出: PhysicsBody类: 问题答案: 必须实施。并应予以实施。

  • 我在保存具有ManyToOne双向关系的实体时遇到问题,如下所示: 警告:HHH000437:试图保存一个或多个与未保存的瞬态实体具有不可为空的关联的实体。在保存这些从属实体之前,必须在操作中保存未保存的瞬态实体。未保存的临时实体:([com . epam . apartments booking . model . city # 912])依赖实体:([[com . epam . apartme

  • 我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例: Hibernate:在作者(名字、姓氏)中插入值(?,) Hi

  • 问题内容: 我看到过很多不同的文章,涉及到您应该以何种方式将对象序列化到文件,并且所有这些在本质上在执行方式和最佳实践方面存在冲突。因此,这就是我要保存的内容: 我们可以假设configArgs的大小已知,我需要制作一个文件,这就是到目前为止的内容。 问题答案: 好吧,我想,您想将对象直接写入文件 我只是提供了重要的代码。通过异常处理来实现。