
Sir i have the following code for scren capturing it is capturing in png format but when i am sending it over other m/c it is taking delay of around 16 seconds..i think it is because this line of code sleep(10000); because i am making the thread to sleep for 10sec it is taking too much of time if i reduce the amt from 10000 to 2000,3000 the delay is of 5-6 sec which is manageable but after sending 4-5 snapshots of the screen when i again send the image(screenshot) error occurs i.e "OutOfMemory Error" in heap plz suggest a solution so that i can either clear or reset the heap so that the images(snapshots) are sent without any error continously
code for server:
package main;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.*;
import java.net.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RemoteDesktopServer extends JFrame implements Serializable{
ServerSocket serverSocket;
Socket socket;
public RemoteDesktopServer() {
try {
serverSocket = new ServerSocket(2009);
while (true) {
socket = serverSocket.accept();
new ChatHandeler(socket);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
RemoteDesktopServer server=new RemoteDesktopServer();
}
}
//========================================
class ChatHandeler extends Thread {
FileInputStream fis;
ObjectInputStream ois;
ImageIcon img;
Image image;
File file;
JFrame frame;
RemoteDesktopServer server;
//static Vector<ChatHandeler> clientsVector = new Vector<ChatHandeler>();
public ChatHandeler(Socket s) {
//server=new RemoteDesktopServer();
file=new File("Server.png");
frame=new JFrame();
try {
//scnr = new Scanner(s.getInputStream());
ois=new ObjectInputStream(s.getInputStream());
//clientsVector.add(this);
start();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void run() {
while (true) {
try {
img = (ImageIcon) ois.readObject();
image= img.getImage();
frame.add(new MyPanel(image), BorderLayout.CENTER);
img = null;
image = null;
Runtime runtime= Runtime.getRuntime();
runtime.gc();
frame.setSize(1300, 800);
frame.setVisible(true);
try {
sleep(10000);
} catch (InterruptedException ex) {
System.out.println(" sleep exception");
}
System.out.println("Read");
} catch (ClassNotFoundException ex) {
//ex.printStackTrace();
System.out.println(" Class not found exception");
} catch (IOException ex) {
//ex.printStackTrace();
System.out.println("IOException");
}
}
}
}
class MyPanel extends JPanel {
Image image;
public MyPanel(Image image ) {
this.image=image;
Toolkit kit = Toolkit.getDefaultToolkit( );
image = kit.getImage("client.png");
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(image, 10, 10, this);
}
}
code for client:
package main;
//////client
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import org.omg.SendingContext.RunTime;
public class RemoteDesktopClient extends JFrame implements Serializable{
public JButton btn;
//====================client
Socket mySocket;
Scanner scn;
PrintStream prntStream;
//=====================robot
Robot robot;
BufferedImage screenShot;
ImageIcon imageIcon;
String str;
FileOutputStream fos;
ObjectOutputStream oos;
File file;
public RemoteDesktopClient() {
imageIcon=new ImageIcon();
file=new File("client.png");
btn = new JButton("Send");
try {
mySocket = new Socket("192.168.1.101", 2009);
new Send(mySocket);
robot.mouseMove(1000, 800);
setSize(300, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//==========================client
}catch (UnknownHostException ex) {
System.out.println("UnKnown Host Exception");
} catch (IOException ex) {
System.out.println("IO Exception after unknown");
}
//==========================client
}
public static void main(String[] args) {
RemoteDesktopClient client = new RemoteDesktopClient();
}
//===========================================
class Send extends Thread {
//public Rectangle rectangle;
public Send(Socket s) {
try {
//scn = new Scanner(s.getInputStream());
//rectangle = new Rectangle();
oos = new ObjectOutputStream(mySocket.getOutputStream());
robot = new Robot();
start();
} catch (IOException ex) {
ex.printStackTrace();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
while (true) {
try {
// rectangle.setSize(Toolkit.getDefaultToolkit().getScreenSize());
screenShot = robot.createScreenCapture(new Rectangle((Toolkit.getDefaultToolkit().getScreenSize())));
//screenShot = robot.createScreenCapture(new Rectangle(800,600));
//screenShot.se
ImageIO.write(screenShot, "png", file);
imageIcon=new ImageIcon(""+file);
//imageIcon.setImage(screenShot);
oos.writeObject(imageIcon);
oos.flush();
//sleep(1000);
screenShot = null;
Runtime runtime= Runtime.getRuntime();
runtime.gc();
} catch (IOException ex) {
ex.printStackTrace();
}
//catch (InterruptedException ex) {
// ex.printStackTrace();
// }
}
}
}
}
Thanks
If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.
Ask your questions, our development team will try to give answers to your questions.