【问题标题】:Why doesn't the ProgressMonitor display on second call?为什么 ProgressMonitor 在第二次调用时不显示?
【发布时间】:2013-11-28 16:40:38
【问题描述】:

我编写了一个程序,它使用默认 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();
    }
}

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

【问题讨论】:

    标签: java swing jframe progressmonitor


    【解决方案1】:

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

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

    • 创建一个 SwingWorker
    • 给它添加一个 PropertyChangeListener
    • 收听“进度”属性
    • 用 SwingWorker 的进度更新监视器的进度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2019-06-05
      • 2021-09-10
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多