gpt4 book ai didi

java - 如何解决 java.lang.OutOfMemoryError : Java heap space in the case when increasing the heap size will mean delayed OutOfMemoryError

转载 作者:行者123 更新时间:2023-12-01 17:15:21 27 4
gpt4 key购买 nike

我正在尝试构建一个应用程序,其中客户端将其屏幕发送到服务器,客户端仅在上次发送屏幕和最新捕获的屏幕之间存在差异时才发送其屏幕(以便该程序在网络)。服务器使用 JFrame 和 JLabel 来显示图像。但问题是一两分钟后,服务器给出了 java.lang.OutOfMemoryError: Java heap space。

请考虑我的代码

public  void go() throws Exception
{
s=new Socket("127.0.0.1",5000);
remoteIP = s.getInetAddress();
remoteIPOnly = remoteIP.toString().split("\\/");
frame=new JFrame(remoteIPOnly[1]);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
InputStream iss=s.getInputStream();
ObjectInputStream is=new ObjectInputStream(iss);
JLabel a=new JLabel();
while(!s.isClosed())
{
if((ImageIcon)is.readObject()!=null)
{
System.out.println("I got here");
imageIcon=(ImageIcon) is.readObject();
image=imageIcon.getImage();
rendered = null;
if (image instanceof RenderedImage)
{
rendered = (RenderedImage)image;
}
else
{
buffered = new BufferedImage(
imageIcon.getIconWidth(),
imageIcon.getIconHeight(),
BufferedImage.TYPE_INT_RGB
);
g = buffered.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
rendered = buffered;
}
frame.setSize(rendered.getWidth(),rendered.getHeight());
a.setIcon(imageIcon);
frame.add(a);
frame.setVisible(true);

}
}
}

这是我的另一段代码,也出现了同样的问题,请帮我优化一下。

 while(true)
{
s=serversocket.accept();
os=s.getOutputStream();
oss=new ObjectOutputStream(os);
image1=r.createScreenCapture(newRectangle(Toolkit.getDefaultToolkit().getScreenSize()));
imageicon=new ImageIcon(image1);
oss.writeObject(imageicon);
while(!s.isClosed()){
image2=r.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit
().getScreenSize()));
b=checkIfImagesAreEqual(image1,image2);
System.out.println(b);
if(b==false){
image1=image2;
imageicon1=new ImageIcon(image2);
oss.writeObject(imageicon1);
oss.flush();
}

任何人都可以告诉我我的逻辑是否正确以及为什么我会收到 java.lang.OutOfMemoryError: Java Heap space 以及扩展堆大小会帮助我,因为我正在计划多个客户端能够连接到服务器吗?

抱歉,如果我的问题很愚蠢,我们将不胜感激。谢谢。

最佳答案

您不断将标签添加到框架中。难道不应该只添加一次吗?

还有一个问题:if((ImageIcon)is.readObject()!=null)会读出图像并丢失它。相反,您应该保留它而不是在 if block 内读取它。例如:

if((imageIcon = (ImageIcon)is.readObject()) != null)

关于java - 如何解决 java.lang.OutOfMemoryError : Java heap space in the case when increasing the heap size will mean delayed OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com