2013-04-15 6 views
0

좋아, 웹에서 다음 코드를 가지고, 그것은 작업을 수행합니다자바 헤로인 FileTransfer

@Override 
public void fileTransferRequest(FileTransferRequest request) { 
    // Check to see if the request should be accepted 

    final IncomingFileTransfer transfer = request.accept(); 
    runnningFileTransfer = transfer; 
    try 
    { 
     final File file = new File("/Users/Akku/Downloads/in2" + request.getFileName()); 
     transfer.recieveFile(file); 
     t = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      try { 
       transfer.recieveFile(file); 
       System.out.println("DONE?"); 
      } catch (XMPPException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     }); 
     t.run(); 

이 코드가 실행을, 내 10메가바이트 테스트 파일의 경우는 꽤 많이 걸립니다 시각. 슬프게도, 나는 전학이 끝났는 지 또는 진행 상황이 무엇인지 알 필요가있다. 재미있게, 또한이 부분을 가지고 (이 단지 자고 진행에 대한 확인) 나는 그것을 추가 할 때, 파일 전송이 더 이상 작동하지 않습니다, 웹에서 :

 while(!transfer.isDone()) 
     { 
      if(transfer.getStatus().equals(Status.error)) 
      { 
       System.out.println("ERROR"+transfer.getError() + " EX: " + transfer.getException()); 
      } 
      else 
      { 
       System.out.println("Written: "+transfer.getAmountWritten()); 
       System.out.println("STATUS"+transfer.getStatus()); 
       System.out.println("PROGRESS"+transfer.getProgress()); 
      } 
     try 
     { 
       Thread.sleep(10000); 
       System.out.println("Waiting..."); 
      } 
      catch (Exception e) 
      { 
      e.printStackTrace(); 
      } 
     } 

모든 힌트는 왜 이런 일이 있는가? 위의 스 니펫이 완벽하게 작동하기 때문에 자바라고 생각합니다.

답변

0

예외가 발생해야하는 경우. 전송 객체에서 두 번 수신을 호출합니다. 두 번째 호출은 파일을 다시 만들려고 할 때 예외를 생성해야합니다. 이 경우 두 번째 호출은 스레드 생성과 함께 transfer() 메서드가 비동기이며 자체 내부 스레딩을 가지고 있기 때문에 필요하지 않습니다.

당신이이 수표를 어디서하고 있는지 보여주지 않기 때문에 왜 당신의 상태 확인과 함께 작동하지 않는지 말하기 어렵습니다. 내 의심은 당신이 읽기 스레드에서 그것을 호출하고 따라서 새로운 패킷의 읽기를 막고 있다는 것입니다. 전송 상태에 대한 루프 검사는 자체 스레드에서 실행되어야합니다.

관련 문제