我在一个基于套接字的java应用程序工作。它获取客户端的屏幕并在服务器上的GUI中显示它。但问题是它只显示客户端的屏幕时间程序已启动并且不更改它。这里是我的代码 服务器端:即时屏幕捕获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){}
}}
错误: - 螺纹
例外 “线程3” java.lang.IndexOutOfBoundsException
at javax.imageio.stream.FileCacheImageOutputStream.seek(Unknown Source)
在javax.imageio.stream.FileCacheImageOutputStream.close(来源不明)
在com.sun.imageio.stream.StreamCloser $ CloseAction.performAction(来源不明)在com.sun.imageio.stream.StreamCloser $ 1.run
(来源不明)
在java.lang.Thread.run(来源不明)
UPDATE:
其实我关闭连接已建立,是造成错误甚至在插座。否则尼克的代码就好了。
你刚才读和一次写的形象呢?循环做! (在服务器上移动imageio.read,在客户端完成screencapture功能!)。也许在一个定时器5秒 –
你的意思是我shud添加while(true)循环在客户端文件? – Cybershadow
是的,否则你只上传一张截图,因为代码只执行一次。在服务器上,你必须更频繁地读取套接字(创建一个5秒左右的计时器......)。 –