因此,当用户单击列表时,我有一个 PrintWriter 和一个 ObjectOutputStream 尝试从客户端发送 int、String 和 Color[],其中“out”是 PrintWriter,outObject 是 ObjectOutputStream。
private class MyMouseListener implements MouseListener{
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseClicked(MouseEvent e){
if(e.getSource() == list){
int index = list.locationToIndex(e.getPoint()); ///get the game that the player has selected
try{
out.println(index);
out.println("hel");
Color[] colors = new Color[5];
outObject.writeObject(colors)
}
}
服务器,其中“in”是扫描仪,“objectIn”是一个objectInputStream:
while(true)
if(in.nextLine().equals("hel")){
System.out.println("fee");
}
else if(in.hasNextInt()){
System.out.println("dee");
}
Object o = objectIn.readObject();
if(o instanceof Color[]){
System.out.println("ree");
}
如果我尝试发送全部三个,则第一次单击时服务器仅注册字符串,然后服务器仅注册 int 后的所有单击,从不注册 Color[],如果我先发送 int,则Color[],然后是 int,如:`
out.println(index);
Color[] colors = new Color[5];
outObject.writeObject(colors);
out.println("hel");
首先仅注册 int 和 Object,第二次仅单击 String,然后仅单击 int。 `
Object o = objectIn.readObject();
if(in.nextLine().equals("hel")){
System.out.println("fee");
}
//Object o = objectIn.readObject();
else if(in.hasNextInt()){
System.out.println("dee");
}
else if(o instanceof Color[]){
System.out.println("ree");
o = null;
}
如果我使用上述一系列 if 语句,则不会注册任何内容
使用第一系列 if 语句,如果我尝试单独发送 Color[],则它不会注册,但如果我用 int 发送它,则两者都会注册。 如果我尝试发送字符串和 Color[],请先发送字符串,如下所示:
out.println("hel");
Color[] a = new Color[5];
outObject.writeObject(a);
两者都注册一次,然后就不再注册,而且以与预期相反的方式注册,即首先注册 Color[],然后注册 String;如果我先发送 Color[],然后发送 String,则两者都不会注册。
最佳答案
我假设您的 out
对象(它是一个 PrintWriter
)包装了 outObject
对象,它是 ObjectOutputStream
>。对于同一底层连接,不应同时使用 PrintWriter
和 ObjectOutputStream
。请参阅this question了解更多详情。
关于java - 通过套接字发送对象、int 和 String、序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302623/