如何为Java RMI创建Runnable Serializable?

时间:2016-07-04 00:06:53

标签: java multithreading serialization rmi runnable

我正在用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;是另一种方法,不太相关)

0 个答案:

没有答案