我有这三类:

命令:

package pack;

public abstract class Command impements java.io.Serializable
{
    public abstract void execute();
}

客户:

package pack;

// imports....

public class Client
{
    Socket socket;

    // Constructor...

    public void sendCommand(Command c)
    {
         try
         {
              new ObjectOuputStream(socket.getOutputStream()).writeObject(c);
         } catch (Exception e) {e.printStackTrace()};
    }
}

MyKeyListener:

这keylistener加入的一个组件在JFrame.

public class MyKeyListener implements KeyListener
{

     private Client client;

     public MyKeyListener(Client c)
     { client = c; }


     public void keyTyped(....)......; // This method does nothing

     public void keyPressed(KeyEvent e)
     {
          client.sendCommand(new Command() {
               public void execute()
               {
                    new Robot().keyPress(e.getKeyCode());
               }
          });
     }

     // The same for keyRelease()....
}

问题是:如果我运行代码,他希望发送命令。流停止写作 因为"MyKeyListener不序列化"???!!但我从来没有试图发送 MyKeyListener

有帮助吗?

解决方案

嵌套类Java实际上不存在的字节的代码的水平-的编译器的假的他们通过插入隐藏的领域,访问方式和构造.在你的情况下,匿名的子 Command 可能有一个编译器生成的参考 MyKeyListener 实例,其中,它的建立是,即使这一参考是没有用任何东西。

为了解决这个问题,使用的顶级类的命令,而不是匿名的类。

其他提示

提示:试试打字MyKeyListener.这一点。toString()在(匿名)命令级的执行()方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top