1

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

    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();
            }
        }
    }
4

2 回答 2

1

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

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

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

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

于 2012-10-04T11:20:38.487 回答
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 。

于 2012-10-03T18:05:16.113 回答