Я работаю над java-приложением, основанным на сокетах. Он извлекает экран клиента и показывает его в графическом интерфейсе на сервере. Но проблема в том, что он просто показывает экран клиента в программа времени была запущена и не меняет ее. Вот мой код Server Side:Мгновенный захват экрана Java
try {
img = ImageIO.read(socket.getInputStream());
while(true){
ImageIcon icon = new ImageIcon(img);
label.setIcon(icon);
}
}
catch (IOException e) {}
стороне клиента:
public class Client{
public static void main(String[] args) throws Exception{
BufferedImage screenShot = new Robot().createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenShot, "PNG", socket.getOutputStream());
public static void main(String[] args) throws Exception{
Socket socket = new Socket("localhost",1999);
Chat chat = new Chat(socket);
Thread thread = new Thread(chat);
thread.start();
}
}
class Chat implements Runnable{
private Socket socket;
public Chat(Socket socket){
this.socket = socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try{ while(true){
BufferedImage screenShot = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenShot, "PNG", socket.getOutputStream());
}}catch(Exception e){}
}}
ОШИБКА: -
Исключение в потоке "Thread-3" java.lang.IndexOutOfBoundsException
at javax.imageio.stream.FileCacheImageOutputStream.seek (Неизвестный источник)
на javax.imageio.stream.FileCacheImageOutputStream.close (Unknown Source)
в com.sun.imageio.stream.StreamCloser $ CloseAction.performAction (Unknown Source)
в com.sun.imageio.stream.StreamCloser $ 1.Run (Unknown Source)
на java.lang.Thread.run (Unknown Source)
UPDATE:
на самом деле я закрывал сокет еще до соединения был устанавливающее, который вызывает ошибку. Код Else Nick просто работал нормально.
вы просто читать и писать изображение один раз? сделайте это в петле! (перемещайтесь на сервере imageio.read в цикле, у клиентов - полная функциональность screencapture!). Может быть, в таймере с 5 секундами –
U mean i shud add While (true) loop в файле на стороне клиента? – Cybershadow
Да, иначе вы загружаете только один снимок экрана, потому что код выполняется только один раз. на сервере вам нужно чаще читать сокет (создать таймер с 5 секунд или около того ...). –