java - 尝试保存和加载基于文本的 ui 游戏时如何修复 java.io.NotSerializableException?
问题描述
我对 java 还很陌生,我正在尝试在基于文本的 UI 游戏保存和加载中实现两种方法,但是当我在终端中运行 save 命令时遇到了一些困难,我得到了 java.io.NotSerializableException我也收到相同的加载错误。本质上我只是想保存游戏状态并加载游戏状态,但我不确定我哪里出错了或者我做得是否正确,非常感谢你的帮助。
public TikTakToeUI() {
scnr = new Scanner(System.in);
game = new TikTakToe();
player = new Player();
}
private void execute(String command)
{
File inFile = new File ("input.txt");
if (command.equalsIgnoreCase("Save")) {
save(inFile);
}else if (command.equalsIgnoreCase("Load")){
load(inFile);
}else {
System.out.println("Unknown command (" + command + ")");
displayMenu();
}
}
private void save(File file)
{
try {
FileOutputStream fileStream = new FileOutputStream(file);
ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
objectStream.writeObject(game);
objectStream.writeObject(scnr);
objectStream.writeObject(player);
objectStream.close();
fileStream.close();
JOptionPane.showConfirmDialog(null,
"Save game state successfully.",
"Tik Tak Toe Game",
JOptionPane.DEFAULT_OPTION);
} catch (Exception e) {
JOptionPane.showConfirmDialog(null,
e.toString() + "\nFail to save game state.",
"Tik Tak Toe Game",
JOptionPane.DEFAULT_OPTION);
}
}
private void load(File file)
{
try
{
FileInputStream fileStream = new FileInputStream(file);
ObjectInputStream objectStream = new ObjectInputStream(fileStream);
scnr = (Scanner) objectStream.readObject();
game = (TikTakToe) objectStream.readObject();
player = (Player) objectStream.readObject();
}
catch (Exception e) {
JOptionPane.showConfirmDialog(null,
e.toString() + "\nFail to load game state.",
"Tik Tak Toe Game",
JOptionPane.DEFAULT_OPTION);
}
}
解决方案
您只能在开始游戏时保存并TikTakToe
创建一个新的。Player
Scanner
你应该更新TikTakToe
和Player
类并实现Serializable
接口
public class TikTakToe implements Serializable {}
public class Player implements Serializable {}
推荐阅读
- java - 在 PicoCLI 中拆分命令
- python - Rabbitmq 在 ioloop 保持活动状态时断开与消费者静默的连接
- html - 前端用户需要 Merchello 电子商务产品搜索功能方面的帮助
- html - HTML 门户 - 无法在“HTMLPortalElement”上执行“激活”门户元素与门户上下文无关
- javascript - JavaScript 中的并行编程
- c# - 列表
不在 C# 中反序列化 xml - java - 如何在 AWS S3 上的静态网页与 Java 中的 AWS Lambda 之间建立连接
- javascript - 如何从初始 JSON 输出中获取“p”的值
- java - 执行更新问题
- sql - 动态透视中的行总计