所以我有一个程序(这是一个简单的聊天客户端),我正试图从服务器发送一个更新的客户端。为此,我正在使用serializable关键字。现有的客户端可以从这种对象传输中加载和执行代码,所以这一切都很好。我的问题是该程序具有一些内部类。现在,我这样做的方法是创建一个由更新所需的所有类文件组成的数组,然后迭代它并一次发送一个。我的问题是它们的发送顺序对执行有影响。如果我首先发送内部类,代码工作,客户端更新,但只要使用其中一个内部类,就会抛出“ClassDefNotFound”异常。或者,如果我最后发送内部类,则代码根本不起作用,并且客户端不会更新。
private static final Class[] clientUpdates =
{EntryPanel.EnterSendListener.class, EntryPanel.ButtonSendListener.class,
EntryPanel.class, MessagePanel.class, GUIClient.ClientThread.class, GUIClient.class,
UpdateClientMessage.class};
是我的数组,其中包含路径的任何内容都是内部类。最后一个元素是运行在发送新客户端时启动新方法的方法。
for(Class c : clientUpdates)
{
String name = c.getName();
InputStream is = c.getClassLoader().getResourceAsStream(
name.replaceAll("\\.", "/") + ".class");
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int i = is.read(buff);
while(i != -1)
{
os.write(buff, 0, i);
i = is.read(buff);
}
byte[] bs = os.toByteArray();
NewMessageType m = new NewMessageType(name, bs);
queue.put(m);
}
queue.put(new UpdateClientMessage("localhost", port));
我正在使用的代码来发送类定义。 NewMessageType是一个类,用于包含类的原始字节数据并将其传输,以便在另一侧读取。把东西放在队列上只是传递它们。
我会第一个承认我在网络方面并不精彩,而且可串行性不是我的强项。但是,我真的可以在这里提供一些帮助。非常感谢。
答案 0 :(得分:0)