2014-12-03 2 views
0

이것은 서버이며 클라이언트로부터 파일을 수신합니다. 전체 파일을 수신하지만 진행 표시 줄이 나타나지 않습니다. ProgressInputStream을 사용하고 있습니다. 다음은 진행 막대를위한 새로운 스레드를 생성하기 위해 SwingWorker를 사용하는 코드 부분입니다.ProgressMonitorInputStream이 팝업되지 않습니다.

SwingWorker<Void,Void> worker = new SwingWorker<Void,Void>() 
     { 
      protected Void doInBackground() 
      { 
       try { 
        ss = new ServerSocket(port); 
        s = ss.accept(); 
        bytes = new byte[1024]; 
        FileOutputStream fos = new FileOutputStream(new File(FileName)); 
        DataInputStream dis = new DataInputStream(s.getInputStream()); 
        pmis = new ProgressMonitorInputStream(frame,"Receiving",dis); 
        pmis.getProgressMonitor().setMillisToPopup(10); 

        while(pmis.read(bytes) > 0) 
        { 
         fos.write(bytes); 
        } 


        ss.close(); 
        fos.close(); 




       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       return null; 
      } 
     }; 
     worker.execute(); 

어떤 도움을 주시면 감사하겠습니다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. 기대해 줘서 고마워.

답변

0

'잠시 복용하는 경우에만'팝업됩니다.

는 NB :

  1. 사본 루프는 잘못된 것입니다. 그것은해야한다 : count은 분명히 int입니다

    while ((count = pmis.read(bytes)) > 0) 
    { 
        fos.write(bytes, 0, count); 
    } 
    

.

  1. DataInputStream은 필요하지 않습니다.
+0

미안하지만 팝업하지 않았습니다. 나는 이미 700+ MB 파일을 보내려고했지만 행운이 없다. 또한 이미 팝업 시간을 10 밀리 초로 설정했습니다. 'pmis.getProgressMonitor(). setMillisToPopup (10);' – essaji

+0

파일의 크기가 얼마인지 미리 알기 원하면'setMaximum()'을 대신 호출 해보십시오. – EJP

+0

문제는 FileOutputStream을 팝업 진행률 표시 줄에 표시해야하지만 데이터가이 스트림을 통해 저장되기 때문에 FileOutputStream을 닫을 수 없다는 것입니다. 나는이 문제에 대한 해결책을 찾지 못한다. – essaji

관련 문제