我编写了一个连接到服务器的 JApplet。连接时它会收到一个 ImageIcon。收到后,它会向服务器发送一个字符串“I”进行确认。这向服务器发出信号发送下一个 imageIcon。
while(noExceptions){
try{
Object something = in.readObject();
if(something instanceof ImageIcon){
camDisplay.setIcon( (ImageIcon)something );
validate();
sendMessage("I");
}else{
System.out.println("What the hell was that?!");
}
Runtime rt = Runtime.getRuntime();
rt.gc();
}catch(Exception e){
noExceptions=false;
...
}
}
当我第一次收到异常时,我添加了对垃圾收集器的调用,但它没有帮助。我放入了一些 println,但它总是在第 128 个图像上崩溃。 Object Something = in.readObject(); 抛出异常
camDisplay 是一个显示在小程序中的 JLabel。
Exception in thread "Thread-12" java.lang.OutOfMemoryError: Java heap space
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at javax.swing.ImageIcon.readObject(Unknown Source)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at RoboClient.run(RoboClient.java:226)
at java.lang.Thread.run(Unknown Source)
修复:
System.out.println((sendImageCount++)+" send image");
out.writeUnshared( new ImageIcon(_image) );
out.flush();
if(sendImageCount>100){
out.reset();
sendImageCount=0;
}
最佳答案
请参阅 ObjectOutputStream.reset() 和 ObjectOutputStream.writeUnshared()。
关于java - JApplet 在 ObjectInputStream.readObject 上遇到 java.lang.OutOfMemoryError 异常(来源未知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702961/