2014-12-03 27 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. 你複製循環是錯誤的。它應該是:

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

其中count顯然是一個int

  1. 您不需要DataInputStream
+0

對不起,但它沒有彈出。我已經嘗試發送700多MB的文件,但沒有運氣。我也已經設置彈出時間爲10毫秒。 'pmis.getProgressMonitor()。setMillisToPopup(10);' – essaji 2014-12-03 13:12:36

+0

嘗試調用'setMaximum()'來代替,如果你有任何想法提前有多大的文件。 – EJP 2014-12-05 08:44:22

+0

我認爲問題是FileOutputStream需要關閉才能顯示彈出進度條,但我無法關閉FileOutputStream因爲數據正在通過此流存儲。我找不到解決這個問題的辦法。 – essaji 2014-12-05 13:30:21