java outofmemoryerror java heap space_Java开发网 - 运行时一段时间后出现"OutOfMemoryError: Java heap space"错误...

一个屏幕抓屏的程序,在服务端抓屏,客户端显示。但运行时一段时间后客户端出现:“Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space”错误!请那位可以帮我解决一下!先谢谢了!

服务器端:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.awt.image.*;

import javax.imageio.*;

import java.io.*;

import java.net.*;

public class SS_Server

{

public static void main(String[] args)

{

try

{

ServerSocket server=new ServerSocket(3333);

while(true)

{

Socket linetoclient=server.accept();

new ClientProc(linetoclient).start();

linetoclient=null;

}

}

catch(IOException ioe)

{

System.out.println(ioe.getMessage());

System.exit(0);

}

}

}

class ClientProc extends Thread//客户端理处线程

{

public ClientProc(Socket s)

{

try

{

System.out.println(s.getInetAddress());

out=new ObjectOutputStream(new BufferedOutputStream(s.getOutputStream()));//构造一个对象输出流从Socket输出流

}

catch(IOException ioe)

{

System.out.println(ioe.getMessage());

}

}

public void run()

{

width=Toolkit.getDefaultToolkit().getScreenSize().width;//取得屏幕宽度

height=Toolkit.getDefaultToolkit().getScreenSize().height;//取得屏幕高度

while(true)

{

try

{

Robot robot=new Robot();

Thread.sleep(100);//睡眠100毫秒

BufferedImage screen=robot.createScreenCapture(new Rectangle(width,height));//拷屏

robot=null;

ImageDatas imageobj=new ImageDatas();//构造一个保存图片的对象

imageobj.saveDatas(screen);//保存存有屏幕图象的对象screen到imageobj

screen=null;

out.writeObject(imageobj);//将imageobj对象写入 ObjectOutputStream

imageobj=null;

}

catch(IOException ioe)

{

System.out.println(ioe.getMessage());

}

catch(InterruptedException ie)

{

System.out.println(ie.getMessage());

}

catch(AWTException awte)

{

System.out.println(awte.getMessage());

}

}

}

private int width,height;

private ObjectOutputStream out;

}

客户端:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.awt.image.*;

import javax.imageio.*;

import java.io.*;

import java.net.*;

public class SS_Client extends JFrame implements Runnable

{

public SS_Client(String s)

{

host=s;

screenSize=Toolkit.getDefaultToolkit().getScreenSize();//取得屏幕分辩率

setBounds((screenSize.width-width)/2,(screenSize.height-height)/2,width,height);//设置窗体大小窗体位置为屏幕中心

c=new Canvas();

add(c);

setVisible(true);

}

public void run()

{

try

{

Socket s=new Socket(InetAddress.getByName(host),port);

in=new ObjectInputStream(new BufferedInputStream(s.getInputStream()));

}

catch(UnknownHostException uhe)

{

System.out.println("Error:001\n未知主机:\n"+uhe.getMessage());

}

catch(IOException ioe)

{

System.out.println("Error:002\n网络输入输出错误:\n"+ioe.getMessage());

}

catch(Exception e)

{

System.out.println("Error:003\n未知错误:\n"+e.getMessage());

}

Graphics2D g=(Graphics2D)c.getGraphics();

while(true)

{

try

{

ImageDatas imageobj=(ImageDatas)in.readObject();

BufferedImage screen=new BufferedImage(imageobj.getWidth(),imageobj.getHeight(),1);

screen=imageobj.loadDatas();

imageobj=null;

g.drawImage(screen,0,0,this);

screen=null;

}

catch(IOException ioe)

{

System.out.println("ioe"+ioe.getMessage());

System.exit(1);

}

catch(ClassNotFoundException cnfe)

{

System.out.println("cnfe"+cnfe.getMessage());

System.exit(1);

}

}

}

public static void main(String[] args)

{

if(args.length==0)

{

System.out.println("Please input Host!");

System.exit(0);

}

new Thread(new SS_Client(args[0])).start();

}

private String host;

ObjectInputStream in;

private Canvas c;

private int width=500,height=500,port=3333;//窗体长宽,连接的服务器端口

private Dimension screenSize;//记录屏幕宽度和高度

}

用于保存图片数据的ImageDatas

import java.io.Serializable;

import java.awt.image.BufferedImage;

public class ImageDatas implements Serializable

{

public void saveDatas(BufferedImage sour)

{

width=sour.getWidth();

height=sour.getHeight();

imageDatas=new int[width][height];

for(int w=0;w

{

for(int h=0;h

{

imageDatas[w][h]=sour.getRGB(w,h);

}

}

}

public BufferedImage loadDatas()

{

BufferedImage img=new BufferedImage(width,height,1);

for(int w=0;w

{

for(int h=0;h

{

img.setRGB(w,h,imageDatas[w][h]);

}

}

return img;

}

public int getWidth()

{

return width;

}

public int getHeight()

{

return height;

}

private int[][] imageDatas;

private int width,height;

}

源码:

attachment.gifScreen.rar (7.0k)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值