【发布时间】:2016-06-06 20:35:38
【问题描述】:
我正在用 Java(类似俄罗斯方块)编写游戏,但运行时出现此错误:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.awt.image.BufferedImage
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at com.sun.proxy.$Proxy0.PoolPieces(Unknown Source)
at Fenetre.<init>(Fenetre.java:196)
at Score.lancerNewFenetre(Score.java:103)
所以这个错误发生在开始时,当我尝试从服务器(类“Partie”(游戏))检索“Piece”数组时,然后设置碎片并能够播放。导致错误发生的代码是:
try
{
this.unpool = this.ninja.PoolPieces(this.id);
System.out.println(unpool);
this.setBoutons(this.unpool);
System.out.println("boutons set");
}
catch (RemoteException e)
{
e.printStackTrace();
}
它在第一行中断,其中“unpool”是一个 Piece[],“ninja”是我在代码开头设置的界面,“PoolPieces”是我获得 3 件池的方法(片[])。以下是“PoolPieces”方法的代码:
public Piece[] PoolPieces(Integer id)
{
Integer rang = this.listejoueurs[id].getRang(id);
Integer retour = rang + 1;
this.listejoueurs[id].setRang(retour);
this.leretourpieces = this.piecespartie[rang];
return this.leretourpieces;
}
我创建了一个类“Joueur”(玩家),每个玩家都有一个“rang”(等级)。因此,所有玩家的可用棋子都是相同的,他们会根据自己在游戏中的进展来取回棋子池。 “listejoueurs”是一个 Joueur[],它是一个包含游戏不同玩家的数组。 “id”是连接客户端和播放器的标识符:添加的第一个播放器被添加到数组中的位置 0,并且 id = 0 被发送到客户端。下一个玩家的 id = 1,依此类推。 “leretourpiece”是我想要返回的 Piece[]。它取自 Piece[][],在游戏开始时随机创建。它是一个数组,由 3 Piece 组成。 "leretourpiece" 根据玩家的进度获取棋子池(如上所述)。
在互联网上查找该错误后,我几乎在每个课程中都实现了 Serializable,但没有任何改变。奇怪的是,错误没有出现,并且成功地获得了池,也许一次超过 10 个意图左右,但是,当把棋子放在网格上时,我遇到了一些问题,错位等等。(这可能是在网格上放置一块的代码中的错误,我不确定)。
所以我很纠结这个问题,我找不到它的来源。非常感谢您花时间阅读本文,并最终帮助我:)
【问题讨论】:
-
好的,我做了你建议的改变,但仍然出现同样的错误:/
标签: java serialization