gpt4 book ai didi

Java:ObjectOutputStream 存在可序列化问题

转载 作者:行者123 更新时间:2023-12-01 07:16:21 25 4
gpt4 key购买 nike

我有这三个类(class):

命令:

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:

此键监听器被添加到 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 实例的引用,即使该引用未用于任何用途。

要解决此问题,请使用 Command 的顶级子类而不是匿名类。

关于Java:ObjectOutputStream 存在可序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com