为什么ProgressMonitor不会在第二次通话时显示?

时间:2013-11-28 16:40:39

标签: java swing jframe progressmonitor

我编写了一个程序,它使用默认java运行时的progressbar类。它完美地工作,除了它只工作一次。我用它来显示各种图像加载到我的GUI中,它在启动时工作正常。但是,一旦我再次调用它,它就会显示一个没有内容的JFrame。我可以拖动JFrame和所有东西,只是它不会显示任何东西。这是特殊的,因为它在第一次运行时起作用,但之后没有。这是我的代码:

    public void prefetch (){
    try{
        pageURLs = mangaEngine.getPageList();
        monitor = new ProgressMonitor(parent, "Loading Chapter..,", null, 0, mangaEngine.getPageList().length);
        pages = new StretchIconHQ[pageURLs.length];
        //Resets page counter to first page by fetching pages in reverse order
        monitor.setMaximum(pageURLs.length-1);
        for(int i = pageURLs.length-1; i>=0; i--){
            pages[i] = mangaEngine.loadImg(pageURLs[i]);
            monitor.setProgress(pageURLs.length-1-i);
            monitor.setNote("Loading Image:" + (pageURLs.length-1-i) + " of " + (pageURLs.length-1));
        }

    }
    catch(Exception ex){
        ex.printStackTrace();
    }
}

关于如何修复它的任何想法?

1 个答案:

答案 0 :(得分:1)

您需要在后台线程中运行长时间运行的代码,例如SwingWorker创建的代码。

事实上,Progress Monitor Tutorial描述了如何做到这一点:

  • 创建SwingWorker
  • 向其添加PropertyChangeListener
  • 收听“进度”属性
  • 使用SwingWorker's更新显示器的进度。