2012-10-03 2 views
1

출력 스트림에 imageicon을 쓸 수 없습니다. 여기 내 코드입니다. 제발 도와주세요. 당신이 실제로 OutputStream 아니면 디스크에 스크린 샷 이미지를 저장하려고처럼출력 스트림에 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(); 
      } 
     } 
    } 
+1

이렇게하면 어떻게됩니까? 사각형은 어떻게 초기화됩니까? 직사각형에 아무것도 없다는 보장이 있습니까? – arcy

+0

Dimension dim = Toolkit.getDefaultToolkit(). getScreenSize(); \t 직사각형 = 새로운 직사각형 (희미한); – Developer

+0

자, 한 가지 질문에 대답했습니다. ImageIcon의 내부를 보면서 직사각형의 내용물을 버리려고 했습니까? 그리고 큰 것 : * 객체를 저장하는 프로그램 대신에 어떤 일이 발생합니까? " – arcy

답변

0

는 것 같습니다.

이 경우 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가 될 수 있습니다.

1

당신은 "붙어있다"고 말합니다. 너 어떻게 알아? 이것은 분명히 다른 코드에 의해 종료 된 스레드입니다. 추적 출력 "새 스크린 샷 전송 됨"이 실행되지 않는다고 가정합니다. 그것은 멈추었거나 writeObject()가 잡히지 않는 예외를 던질 수 있기 때문일 수 있습니다.

IOException 이후에 throwable을 catch하여 다른 예외가 있는지 확인하십시오.

이미지가 생성 된 직후 알려진 이미지로 대체하고 이미지가 표시되는지 확인하십시오. 이 특정 writeObject() 호출에 문제가 있거나 프로그램의 다른 곳에서 문제가 있는지 파악하는 데 도움이됩니다.

모든 것이 아니라 화면에서 작은 사각형을 사용해보십시오. 아마도 getScreenSize()는 화면보다 한 픽셀 크기 큰 것을 사용할 수없는 것을 반환합니다. 작은 직사각형이 작동하는 경우 두 치수 모두에서 몇 픽셀만큼 직사각형을 축소 해보십시오.

관련 문제