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() は、画面より 1 ピクセル サイズ大きいものなど、使用できないものを返します。小さな長方形が機能する場合は、長方形を両方の次元で数ピクセル縮小してみてください。

于 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);

formatNamejpg、png、または gifのいずれかを指定できます。

于 2012-10-03T18:05:16.113 に答える