当creatin在java中的内部类时,类不可序列化异常

时间:2015-07-27 23:23:33

标签: java multithreading serialization

我的代码与此主题类似。 Class not serializable after methods are overridden

但我的目标是发送一个方法在另一台计算机上处​​理。 所以,我创建了这个存在于两端的类。当我要序列化类时,我重写方法就像上面的线程所示,我得到了非序列化的异常。 我在上面的帖子中看到我必须创建一个静态内部类。我怎样才能做到这一点?!一个匿名的内心阶级不能是静态的! 如果我明确了类名,我将在应用程序的反序列化结束时遇到问题。

客户代码:

public static void main(String[] args) {
    try {
        // TODO code application logic here
        Socket client = new Socket("192.168.25.22", 62222);
        System.out.println("Cliente conectado");
        ObjectInputStream input = new ObjectInputStream(client.getInputStream());
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        try { 
            Task t =(Task) input.readUnshared();
            System.out.println("Objeto recebido...");
            t.myTask();
            System.out.println("ok");
        } catch (ClassNotFoundException ex) {

            ex.printStackTrace();
        }
    } catch (Exception ex) {
        System.out.println("ERRO!");
        ex.printStackTrace();
    }
}

服务器代码:

public static void main(String args[]) {

            try {
                ServerSocket server = new ServerSocket(62222);
                System.out.println("Listening on 62222...");

                Socket client = server.accept();
                System.out.println("New client connected with IP: " + client.getInetAddress().getHostAddress());

                 Task t = new Task(null){@Override public void myTask(){System.out.println("Olá");}};


               //Task tz = new Tsk(null);

                ObjectOutputStream output;
                output = new ObjectOutputStream(client.getOutputStream());
                output.writeUnshared(t);
                output.close();

                System.out.println("Task created");
                System.out.println("Objeto enviado.");

            } catch (Exception ex) {
                ex.printStackTrace();
            }


}

任务类代码:

 public class Task implements Serializable{
 List<Object> dataImput;
 List<Object> dataOutput;
 boolean finished;
 private static final long serialVersionUID = 595012310163575L;

 public Task(List<Object> dataImput){
     this.finished=false;
     this.dataImput= dataImput;

 }

 public void myTask(){
     System.out.println("Not Implemented.");
 }

public boolean isFinished() {
    return finished;
}

}

1 个答案:

答案 0 :(得分:0)

  

我的目标是发送一个方法在另一台计算机上处​​理。

你做不到。您可以发送对象的实例。不一样。

  

我在上面的帖子中看到我必须创建一个静态的内部类。

静态嵌套类。 “静态内在”是一个矛盾。

  

我该怎么做?! anonymus内部类不能是静态的!

正确。所以你不能使用匿名内部类。你的设计是错的。改变它。

  

如果我明确了类名,我将在应用程序的反序列化结束时遇到问题。

我不知道这意味着什么,或者你指的是什么问题。