我仍然在学习Java,我已经搜索到Kryonet的Javadoc,并没有找到我的问题的任何答案。Kryonet,不能发送BufferedImage
我正在给一个简单的聊天程序添加一个网络摄像头功能。
我目前正在尝试将我的网络摄像头拍摄的单个帧传输到另一台计算机。
Kryonet让我送 “自制” 的数据包,所以使这个包:
Packet9WebcamFrame.java
import java.awt.image.BufferedImage;
public class Packet9WebcamFrame{
public BufferedImage frame;
}
在我的客户我只好再注册这个包:
client.getKryo().register(Packet9WebcamFrame.class);
但后来我有错误,让我注册其他类:
client.getKryo().register(java.awt.image.BufferedImage.class);
client.getKryo().register(java.awt.image.ComponentColorModel.class);
client.getKryo().register(java.awt.color.ICC_ColorSpace.class);
client.getKryo().register(float[].class);
client.getKryo().register(java.awt.color.ICC_ProfileRGB.class);
client.getKryo().register(short[].class);
client.getKryo().register(byte[].class);
client.getKryo().register(int[].class);
client.getKryo().register(sun.awt.image.SunWritableRaster.class);
client.getKryo().register(java.awt.image.DataBufferByte.class);
client.getKryo().register(byte[][].class);
所以,现在,当我的客户端接收数据包说:“你好,我需要你给我的摄像头帧请”,它是:
webcam.open();
if (webcam.isOpen())
{
Packet9WebcamFrame wFrame = new Packet9WebcamFrame();
wFrame.frame = webcam.getImage();
//We send the frame via the packet
try
{
Main.client.sendTCP(wFrame);
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("I have sent a webcam frame");
webcam.close();
}
之后,我希望它的工作,但仍然一个错误:
com.esotericsoftware.kryo.KryoException: java.nio.BufferOverflowException序列化迹:Bankdata银行 (java.awt.image.DataBufferByte中)的DataBuffer (sun.awt.image.SunWritableRaster)RAST呃 (java.awt.image.BufferedImage中)
帧(com.jmr.monitor.packets.Packet9WebcamFrame)
在 com.esotericsoftware.kryo.serializers.FieldSerializer $ ObjectField.write(FieldSerializer.java :585) 处 com.esotericsoftware.kryo com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) 在com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)。 serializers.FieldSerializer $ ObjectField.write(FieldSerializer.java:564) at com.esotericsoftware.kryo.serializers.FieldSerializer.wri te(FieldSerializer.java:213) at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)at com.esotericsoftware.kryo.serializers.FieldSerializer $ ObjectField.write(FieldSerializer.java:564) at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)at com.esotericsoftware.kryo.serializers.FieldSerializer $ ObjectField .WRITE(FieldSerializer.java:564) 在 com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) 在com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:571) 在 com.esotericsoftware.kryonet.KryoSerial ization.write(KryoSerialization.java:50) at com.esotericsoftware.kryonet.TcpConnection.send(TcpConnection.java:192) at com.esotericsoftware.kryonet.Connection.sendTCP(Connection。Java的:59) 在 com.jmr.monitor.PacketHandler.handlePacket4(PacketHandler.java:131) 在com.jmr.monitor.Main $ 1.received(Main.java:93)
所以,这是一个bufferOverflow问题,我在我的客户端的构造函数中尝试了一些东西,例如增加缓冲区大小但目前还没有运气。
任何想法如何解决这个恼人的问题?
预先感谢您。
Regards,
Azsde。