我正在用Java构建游戏。 一切都是通过MVC设计完成的,我正在使用RMI和Observer Pattern。 用户有一个登录过程,他们可以进入主页,然后可以从那里进入轮盘表。 当用户进入表格时,会创建一个Round(当前轮次)类。
以下是问题: Round类是Serializable并且具有属性" Timer"。 类Timer实现了Runnable和Serializable。它还有一个属性Thread" thread"我执行为该回合制作计时器。 类Table是远程对象!,它不是可序列化的。
我得到的错误是Thread类的NotSerializable异常。 因为,确实,Thread类不是Serializable ..
我该如何解决这个问题? 谢谢你,原谅我的无知!
我将复制一些代码供您检查:
public class Round implements Serializable{
private Table t;
private Timer timer;
public Round(Table t) {
this.t = t;
timer = new Timer(t);
timer.setTime(60);
timer.execute();
}
//other methods...
}
在课程计时器中:
public class Timer implements Runnable, Serializable{
private Thread thread;
private boolean on;
private static int time;
private int value;
private Table t;
public Timer(Table t) {
this.t = t;
}
public static void setTime(int t) {
time = t;
}
public void execute(){
if(!on){
thread = new Thread(this);
on=true;
thread.start();
}
}
public void interrupt(){
on = false;
thread.interrupt();
}
public void end(){
setValue(0);
if(getState()){
try {
t.changePlayers();
} catch (RemoteException ex) {
System.out.println(ex);
}
}
}
public boolean getState(){
return on;
}
public void setValue(int v) {
value = v;
}
public int getValue() {
return value;
}
@Override
public void run() {
try{
for(value = time;value>0 && on;value--){
Facade.getInstance().notify("EVENT_TIMER");
try {
thread.sleep(1000);
} catch (InterruptedException ex) {}
}
end();
Facade.getInstance().notify("EVENT_TIMER");
}catch(RemoteException e){}
}
}
远程类表中的changePlayers()方法:
public void changePlayers() throws RemoteException{
ArrayList<Player> copy = new ArrayList(players);
for(Player p : copy){
confirm(p);
}
}
(方法&#34;确认&#34;是另一种方法,不太相关)