1

我编写了一个程序,它使用默认 java 运行时中的进度条类。它完美地工作,除了它只工作一次。我用它来显示加载到我的 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();
    }
}

关于如何解决它的任何想法?

4

1 回答 1

1

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

事实上,进度监视器教程描述了如何做到这一点:

  • 创建一个 SwingWorker
  • 向它添加一个 PropertyChangeListener
  • 听“进度”属性
  • 用 SwingWorker 的进度更新监视器的进度。
于 2013-11-28T16:43:30.600 回答