【问题标题】:Progress copying contents of an array to JTextArea using JProgressBar使用 JProgressBar 将数组的内容复制到 JTextArea 的进度
【发布时间】:2015-03-14 20:09:35
【问题描述】:

我想使用JProgressBar 来监控将字节数组的内容复制到JTextArea 的进度。事实上,我已经阅读了很多关于这方面的教程,但我仍然卡在下面的代码中:

byte[] encodedImg = bOut.toByteArray();
int length = encodedImg.length;
int current = 0;

JProgressBar progressBar = new JProgressBar();
progressBar.setMaximum(length);
progressBar.setValue(0); 

ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesReadSoFar = 0;

while(length  != -1) 
{   
        out.write(buffer); 
        current += bytesReadSoFar;
        textArea.setText(String.valueOf(buffer));
        progressBar.setValue(current);
}

很遗憾,我仍然无法获得我想要的进度。谁能给我提示一下。

【问题讨论】:

  • 你要么阻塞了Event Dispatching Thread,要么违反了Swing的单线程规则,看看Concurrency in SwingWorker Threads and SwingWorker
  • 还有exampleexample
  • 顺便说一句 - 1024 字节?如果 JVM 需要不止一次读取来完成任务,我会感到惊讶。尝试将System.out.println(current); 添加到循环中。我敢打赌你只会看到一个输出,它显示为1024。但是为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • int length = encodedImg.length; 我刚刚注意到循环正在length 上进行测试,但该变量的值在循环体中没有改变(暗示无限循环)! ...发布 MCVE。

标签: java swing io outputstream jprogressbar


【解决方案1】:

我猜“当前”值应该在 0 到 100 之间,请使用 debug 或 println 检查你得到的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2012-10-03
    相关资源
    最近更新 更多