当前位置: 首页 > 面试题库 >

JProgressBar不会更新

蒲坚
2023-03-14
问题内容

我正在尝试将JProgressBar添加到我的程序中,但不会更新!仅当原因为100%时,该值才会更改。这是我的方法。

public void downloadImages(List<String> images) {
    if (errorCode == 0) {
        for (int i = 0; i < images.size(); i++) {
            if (errorCode == 0) {
                main.progressLabel.setText("Downloading image " + Integer.toString(i + 1) + " of " + Integer.toString(images.size()));
                String imageStr = images.get(i);
                String imageName = imageStr.substring(imageStr.lastIndexOf("/") + 1);
                try {
                    URL url = new URL(imageStr);
                    InputStream in = url.openStream();
                    OutputStream out = new FileOutputStream(saveDirectory + imageName);

                    byte[] b = new byte[2048];
                    int length;
                    while ((length = in.read(b)) != -1) {
                        out.write(b, 0, length);
                    }

                    in.close();
                    out.close();
                } catch (MalformedURLException e) {
                    errorCode = BAD_URL;
                } catch (IOException e) {
                    errorCode = INVALID_PATH;
                }
                main.progressBar.setValue(((i+1)/images.size())*100);
            }

        }
    }
}

更改进度栏的值位于上述方法的底部。

这就是我所谓的方法。

public void download() {
    final Downloader downloader = new Downloader(this, albumUrl.getText(), downloadPath.getText());
    progressBar.setValue(0);
    downloadButton.setEnabled(false);

    new Thread(new Runnable() {
        public void run() {
            List<String> images = downloader.getImages(downloader.getPageSource());
            downloader.downloadImages(images);
            if (downloader.getErrorCode() == 0) {
                progressLabel.setText("All images have been downloaded!");
            } else {
                String error = "";
                switch (downloader.getErrorCode()) {
                case Downloader.BAD_URL:
                case Downloader.NOT_IMGUR_ALBUM:
                    error = "The URL entered is either invalid or does not link to an Imgur album.";
                    break;
                case Downloader.BLANK_URL:
                    error = "The album URL field cannot be blank.";
                    break;
                case Downloader.INVALID_PATH:
                    error = "The system cannot find the download directory path specified.";
                    break;
                case Downloader.BLANK_PATH:
                    error = "The download directory cannot be blank.";
                    break;
                case Downloader.CANNOT_READ_URL:
                    error = "An error occoured while reading the URL.";
                    break;
                case Downloader.PARSING_ERROR:
                    error = "An error occoured while parsing the URL.";
                    break;
                }
                JOptionPane.showMessageDialog(Main.this, error, "Error", 0);
            }
            downloadButton.setEnabled(true);
        }
    }).start();
}

编辑:以上根本不是问题,问题之一是程序正在使用整数除法而不是十进制。


问题答案:

images.size()是一个整数,也是i+1。因此发生的是小数被截断。你应该做什么,就像

main.progressBar.setValue((int)((i+1)/(double)images.size())/100))

这样做是确保将i+1其除以具有十进制功能的数据类型,该数据类型将返回更具包容性的数据类型(在这种情况下为double),然后将double除以int不会有问题,因为它更具包容性,它仍然会返回一个double。然后,我们将其强制转换为int,因为这就是数据类型所setValue()要的。



 类似资料:
  • 问题内容: 我无法更新进度条…这是我的代码 进度栏状态仅在线程末尾更新。有人能帮我吗?? 问题答案: 谢谢大家 我这样解决了

  • 问题内容: 干得好,现在我只想知道为什么如果我将while循环中的System.out.println指令添加到while循环中,则同时在Gui中的cmd和Pgbar上都显示了进度?: 需要一些帮助,我无法获取JProgressBar进行更新,我无法使用SwingWorker,我必须解决这个问题。变量Path.operationProgress是来自“ Path”类实例的静态变量,它是从另一个线程

  • 问题内容: 我知道该主题已经在许多问题上得到了解答,但仍然无法解决。 我只想 在提取 大型xml文件的 某些内容 时 更新progressBar 。我认为在另一个线程中使用耗时的循环就足够了,但是?。我设法得到的是ProgressBar要么根本不显示,要么在关闭之前最后进行更新。 在启动该应用程序附近的某个地方,我有: 在显示和更新带有JProgressBar的JDialog时: 所以我有这个 m

  • 问题内容: 我是Java的新手,但需要知道开发人员是否有可能,以便 他/她可以更改的形状JProgressBar。我的意思是假设 我想更改形状,使其看起来像圆形或 其他形状? 尽管我只是希望将其从条形更改为弧形,或者 可以说我想将条形更改为任何其他形状。我的进度条 可能看起来像条形以外的曲线。我想在其中添加一条曲线。 问题答案: a的外观JProgressBar由组件的UI委托控制,该委托通常从派

  • 介绍 (Introduction) JProgressBar类是一个可视地显示某个任务进度的组件。 Class 声明 (Class Declaration) 以下是javax.swing.JProgressBar类的声明 - public class JProgressBar extends JComponent implements SwingConstants, Access

  • 问题内容: 我有一个加载文本文件并将其切成块以进行进一步处理的类。 这是课程: 取消注释时,这可以正常工作。但是,当我评论该类时不会更新进度条。 我称我的班级为按钮,这是: 这应该可以正常工作而无需睡觉,那么我在这里做错了什么? 更新: 原来,我不是最好的人,并导致这种行为。 这是课程: 对于专业人士而言,这可能是一团糟。如何在对话框中显示进度条,该对话框在完成过程中将带有确认按钮以放置对话框?