Я все еще изучаю Java, и я искал в Javadoc Kryonet и не нашел ответов на свою проблему.
Я добавляю функцию веб-камеры в простую программу чата.
В настоящее время я пытаюсь передать один кадр, снятый моей веб-камерой, на другой компьютер.
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 Трассировка сериализации: банковские данные (java.awt.image.DataBufferByte) dataBuffer (sun.awt.image.SunWritableRaster) растр (java.awt.image.BufferedImage)
кадр (com.jmr.monitor.packets.Packet9WebcamFrame)
на com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:585) на com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) на com.esotericsoftware.kryo.Kryo.writeObject (Kryo.java:504) по адресу com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564) по адресу com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213) по адресу com. esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) в com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:564) в com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer. java:213) по адресу com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504) по адресу 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.KryoSerialization.write(KryoSerialization.java:50) на com.esotericsoftware.kryonet.TcpConnection.send(TcpConnection.java:192) ) в 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, я попробовал несколько вещей в конструкторе моего клиента, например, увеличить размер буфера, но пока безуспешно.
Любая идея о том, как исправить эту досадную проблему?
Заранее спасибо.
С уважением,
Азде.