您应该考虑使用SwingWorker。基本上,您在
SwingWorker提供的后台线程上执行所有IO
,并且有向swing线程报告进度的内置方法。
然后,无论何时更新该职位,您都可以自动更新进度,而不是连续轮询,这是您到目前为止所做的。
看看Swingworker超时或带有FileReader的SwingWorker看看是否有帮助。
另一种解决方案,如果您不想使用
SwingWorker,可能就是这样做,而不是更新该
position值,而是直接调用进度条,如下所示:
SwingUtilities.invokeLater(new Runnable() { @Override public void run() { getMyProgressBar().setValue(position); }});假设您已设置进度条,使其最大为文件的大小。



