0

我想显示使用 jprogressbar 将文件从一个文件夹复制到另一个文件夹的进度。我所做的所有事情,但 jprogress 栏在最后运行并在最后显示 100%。我是初学者并以这种形式阅读主题,上面说我应该使用 EDT,但我仍然没有得到所有的东西。我还创建了另一个线程来更新 Jprogress 栏,但没有任何反应。我的部分代码是

        jProgressBar1.setMinimum(0);
        jProgressBar1.setMaximum(100);
        try
        {
            fis = new FileInputStream(read);
            BufferedInputStream bins = new BufferedInputStream(fis);
            int b;
            long copied_data=0;
            for(int i =0;i<no_of_parts;i++)
            {
                copied_data = 0;
                fos = new FileOutputStream(jTextField2.getText()+"\\"+reading_file_name+".part"+i);
                bouts = new BufferedOutputStream(fos);
                while((b = bins.read())!= -1)
                {
                    bouts.write(b);
                    percentage = (progress*100)/file_size;
                    jProgressBar1.setValue(percentage);
                    copied_data++;
                    progress++;

                    if(copied_data==each_part_size_in_byte)
                    {
                        bouts.flush();
                        bouts.close();
                        break;
                    }
                }
                bouts.flush();
                bouts.close();

            }

        }catch(Exception e){}
4

1 回答 1

3

更新进度条的代码不应与文件复制操作在同一线程上运行。您需要在单独的线程上运行文件复制操作和一个 Swing 计时器来查询复制任务的进度并定期更新 EDT 上的进度条。您当前正在 EDT 上执行所有操作,这会阻止进度条更新,因为您在操作进行时锁定了事件线程。您应该只使用 EDT 来更新 Swing 组件,其他一切都应该在其他线程中运行。

于 2012-03-18T14:19:48.123 回答