2014-12-03 49 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