因此,今天我正在为Minecraft服务器开发一个插件。为此,我创建了一个代表赛道的“Track”类。为了将所有现有轨道与他们的数据一起存储,我想保存整个轨道对象,这使得我的一切都变得更加简单。总之,我在我的Track类中实现了Serializable,以便稍后使用ObjectOutputStream。当我开始保存轨道Java创建对象的文件,但它也给我一个警告/错误以及:Java - NotSerializableException(保存对象)
14:19:00] [服务器线程/警告]:java.io.NotSerializableException:org .bukkit.craftbukkit.v1_8_R2.CraftWorld [14:19:00] [服务器线程/ WARN]:在java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) [14:19:00] [服务器线程/ WARN]:在java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) [14:19:00] [Server thread/WARN]:在java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) [ 14:19:00] [服务器线程/ WARN]:在java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) [14:19: 00] [Server thread/WARN]:在java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) [14:19:00] [Server thread/WARN]:在java.io.ObjectOutputStream.writeObject(ObjectOutputStream。 [服务器线程/ WARN]:在de.avarion.speedrunners.Main.saveTracks(Main.java:206) [14:19:00] [Server thread/WARN] :at.avarion.speedrunners.Main.onDisable(Main.java:48) [14:19:00] [Server thread/WARN]:at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java: 323) [14:19:00] [服务器线程/警告]:at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:359) [14:19:00] [Server thread/WARN] :at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [14:19:00] [Server thread/WARN]:at org.bukkit.plugin.Si mplePluginManager.disablePlugins(SimplePluginManager.java:417) [14:19:00] [Server thread/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.java:458) [14:19:00] [Server thread/WARN]:at net.minecraft.server。 v1_8_R2.MinecraftServer.run(MinecraftServer.java:590) [14时十九分00秒] [Server线程/ WARN]:在java.lang.Thread.run(Thread.java:745)
这里是我的Track类的一部分。我注意到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.....
现在,这里是一小段代码片段,我保存跟踪对象:
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创建该对象,所以它有点作品。但我不知道如何摆脱这个警告。
感谢您的帮助
@VGR请在评论前阅读。我要求把暂时的这些领域不是必需的。 –
好吧,所以我发现这个错误是由来自api的字段引起的,并且他们没有被搜索。所以问题是将它们进行检索,因为我不想遗赠每一类 – AvarionDE
@AvarionDE这篇文章对你有帮助 –