【问题标题】:Jprgressbar in Jdialog box not updatingJdialog 框中的 Jprgressbar 未更新
【发布时间】:2012-03-18 13:46:53
【问题描述】:

我想显示使用 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){}

【问题讨论】:

  • 不不,你误会我了,我只是需要一些建议
  • 它工作了,实际上 JprogressBar 没有更新,它在最后显示 100% 所以我只想让它实时运行,谢谢我的任务完成了。

标签: java swing io jprogressbar event-dispatch-thread


【解决方案1】:

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

【讨论】:

  • 我改变了我的代码,我把所有的文件复制操作放在了其他线程中,只有进度条在 actionPerfromed 方法上,最后进度条还在更新
  • 你如何在线程之间交流进度?您需要确保 EDT 可以看到进度更新。您可以同步或标记百分比变量 volatile。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多