Mar*_*aux 0 java sockets serialization objectoutputstream
我有这三个类:
命令:
package pack;
public abstract class Command impements java.io.Serializable
{
public abstract void execute();
}
Run Code Online (Sandbox Code Playgroud)
客户:
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()};
}
}
Run Code Online (Sandbox Code Playgroud)
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()....
}
Run Code Online (Sandbox Code Playgroud)
问题是:如果我运行代码并且他想发送命令.流停止写入因为"MyKeyListener不可序列化"??? !! 但我从不尝试发送MyKeyListener
Java中的嵌套类实际上并不存在于字节代码级别 - 编译器通过插入隐藏字段,访问方法和构造函数来伪造它们.在您的情况下,匿名子类Command可能具有编译器生成的MyKeyListener对其创建实例的引用,即使该引用未用于任何内容.
要解决此问题,请使用Command的顶级子类而不是匿名类.
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |