在输出流中写入imageicon

时间:2012-10-03 17:22:45

标签: java image sockets outputstream awtrobot

我无法在输出流中编写imageicon。这是我的代码。请任何人帮助我。

    public ScreenSpyer(Socket socket, Robot robot, Rectangle rect) {
        this.socket = socket;
        this.robot = robot;
        this.rectangle = rect;
        start();
    }

    public void run(){
        oos = null; 
        try{                
            oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(rectangle);
            //  oos.flush();
            // oos.reset();
        }catch(IOException ex){
            ex.printStackTrace();
        }

        while(continueLoop){
            //Capture screen
            image =  robot.createScreenCapture(rectangle);              
            imageIcon = new ImageIcon(image);    
            //Send captured screen to the server
            try {
                System.out.println("before sending image");
                System.out.println("intermidiate");
                // oos.reset();
                oos.writeObject(imageIcon);                    
                System.out.println("New screenshot sent");
                //oos.reset();
                //oos.flush();
                oos.reset();
            } catch (IOException ex) {
               ex.printStackTrace();
            }    

            try{
                Thread.sleep(1000);                   
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

你说“它被卡住了”;你怎么知道的?这显然是一个线程,由其他代码终止。我假设跟踪输出“发送新屏幕截图”没有执行;可能是因为它被卡住了,或者writeObject()可能会抛出你没有捕获的异常。

在IOException之后捕获throwable以查看是否存在另一个异常。

生成图像后,将其替换为已知图像并查看是否已写入图像;这将有助于弄清楚这个特定的writeObject()调用是否存在问题,或者程序中其他地方出现了什么问题。

尝试使用屏幕上的小矩形,而不是全部。也许getScreenSize()返回一些不可用的东西,比像屏幕大一个像素大小的东西。如果一个小矩形有效,请尝试在两个维度上将矩形缩小几个像素。

答案 1 :(得分:0)

看起来您实际上是在尝试将屏幕截图图像保存到OutputStream或者可能是磁盘。

在这种情况下,您不必使用ImageIcon。您可以保存从createScreenCapture调用返回的图像。您可以使用ImageIO保存图片:

ImageIO.write(BufferedImage image, String formatName, File output);

ImageIO.write(BufferedImage image, String formatName, ImageOutputStream output);

ImageIO.write(BufferedImage image, String formatName, OutputStream output);

formatName可以是jpg,png或gif。