从另一个类访问时重绘进度条

时间:2014-01-13 07:52:18

标签: java swing jprogressbar

我有一个主要类JProgressBar。在主类中,我创建了一个类(名为Opener)的实例,该类具有读取通常较大的文本文件的方法(> 50000行文本)。

我将JProgressBar的引用传递给读取txt文件的Opener类的方法,以便可以从Opener类访问进度条。

方法定义如下:

 public void readtxtfile (JProgressBar myjProgressBar){....}

我这样称呼方法:

 Opener myopener = new Opener();
 myopener.readtxtfile (jProgressBar1);

我知道对进度条的引用工作正常,因为我可以从那里设置它(当创建主类时,进度条设置不可见)。

readtxtfile方法中,我在读取txt文件时更改进度条的值。

 myjProgressBar.setValue(mycounter);
 myjProgressBar.revalidate();
 myjProgressBar.repaint();

我的问题是进度条没有重新绘制,因为它的值会发生变化。 我该怎么办?

P.S: 完成txt文件的所有读取后,进度条最后刷新。但意味着没有任何可见的事情发生。

1 个答案:

答案 0 :(得分:3)

这听起来更像是你试图从事件调度线程中读取文件,阻止它执行任何重新绘制。

可能最好的选择是使用SwingWorker在后​​台运行并加载文件的内容并使用它的属性更改支持来更新进度。

请查看Worker Threads and SwingWorker了解详情

查看thisthis示例