我使用 JMS 实现了自己的编码/解码系统(练习)。我发出请求并得到响应。我想在收到正确的响应后触发自己的回调作为响应。但我认为我的异常(exception)是序列化问题。但我不知道如何解决它。
我使用该代码来调用服务器
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Request request = new Request("printServer:" + printMessage.getText());
request.setAsyncCallback(new AsyncCallback() {
/**
*
*/
private static final long serialVersionUID = 5204649755139243369L;
@Override
public void onSuccess(String content) {
System.out.println("async callback: " + content);
}
});
c.callServer(request);
}
});
我的请求如下所示:
公共(public)类Request扩展了Conveyable { 私有(private)静态最终长serialVersionUID = 4535036450648916878L;
public static int requestIDInc = 0;
private int requestID;
private AsyncCallback callback;
public Request(String content)
{
super(content);
synchronized (this) {
requestID = ++requestIDInc;
}
}
public int getRequestID() {
return requestID;
}
public AsyncCallback getAsyncCallback() {
// TODO Auto-generated method stub
return callback;
}
public void setAsyncCallback(AsyncCallback callback)
{
this.callback = callback;
}
}
我自己的回调如下所示:
public abstract class AsyncCallback implements Serializable{
/**
*
*/
private static final long serialVersionUID = 4951246599084406476L;
public abstract void onSuccess(String content);
}
我得到的异常(exception)是:
javax.jms.MessageFormatException: machines.client.ClientWindow$1
at org.exolab.jms.message.ObjectMessageImpl.setObject(ObjectMessageImpl.java:194)
看起来有点像 ClientWindow,其中创建了请求并通过单击按钮将其触发,该回调包含在其中。但我不知道为什么。或者也许问题并不存在。
最佳答案
您的 AsyncCallback 子类是作为 ClientWindow 内部的内部类创建的。非静态内部类包含对父类的引用。
关于java - 自定义AsyncCallback的序列化问题(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589691/