public void Runs() {
ExecutorService pool = Executors.newFixedThreadPool(10);
int j = table.getRowCount(); for (int i = 0; i < j; i++) {
String url = table.getValueAt(i, 1).toString();
String file = table.getValueAt(i, 2).toString();
MyThread trd = new MyThread(url, file, i);
pool.execute(trd);
Update(trd, i); // 更新表格数据
} pool.shutdown(); } private void Update(final MyThread trd, final int i) {
Thread t = new Thread(id) {
public void run() {
while (true) {
if (trd.getFlag() == 2) { //图片下载完成
table.setValueAt("go", i, 6);
break;
} if (trd.getLen() > 0) { // 图片大小字节数
table.setValueAt(getLength(trd.getLen()), i, 3);
table.setValueAt("start", i, 6);
}
if (trd.getRead() > 0) { // 当前读取字节数
int k = (int) trd.getRead() / 1024;
int p = k * 100 / (int) (trd.getLen() / 1024);
table.setValueAt(String.valueOf(p), i, 4);
} try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
}

解决方案 »

  1.   

                        if (trd.getRead() > 0) { // 当前读取字节数
                            int k = (int) trd.getRead() / 1024;
                            int p = k * 100 / (int) (trd.getLen() / 1024);
                            table.setValueAt(String.valueOf(p), i, 4);
                        }显示进度条的图片下载完成,进度条没显示完成
      

  2.   


    int k =  trd.getRead() / trd.getLen() ;这样?
      

  3.   

    你不应该用K来计算,而应该用下载的字节数/文件的总长度字节数 
    这个永远不会错, 显示的时候,再转成K,内部计算全部用字节!啥意思long k =  trd.getRead() / trd.getLen() ; 
      

  4.   

    他是说,计算用byte显示用kb
      

  5.   


    long p = trd.getRead() / trd.getLen();
    p = p / 1024;
    table.setValueAt(String.valueOf(p), i, 4);是这样?如果是这样,进度都没显示了
      

  6.   

    发现了个问题trd.getRead() / trd.getLen() 打印的结果为0好像被取整了,怎样让他保留小数未了
      

  7.   

    还有就是 线程时间设置过长 try {
    Thread.sleep(200);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }这样就可以每次都到95%左右,呵就是不能到 100%long p = trd.getRead() * 100 / trd.getLen();我的公式
      

  8.   


    你的这个分子比分母小,自然是如果两个都是整数的话,结果就是0了,用:
    trd.getRead() * 100 / trd.getLen()现实的时候再向后面加一个%
      

  9.   


                        if (trd.getFlag() == 2) { //图片下载完成
                            table.setValueAt("go", i, 6);
                            break;
                        }                    if (trd.getLen() > 0) { // 图片大小字节数
                            table.setValueAt(getLength(trd.getLen()), i, 3);
                            table.setValueAt("start", i, 6);
                        }
                        if (trd.getRead() > 0) { // 当前读取字节数
                            int k = (int) trd.getRead() / 1024;
                            int p = k * 100 / (int) (trd.getLen() / 1024);
                            table.setValueAt(String.valueOf(p), i, 4);
                        }改为
                        if (trd.getLen() > 0) { // 图片大小字节数
                            table.setValueAt(getLength(trd.getLen()), i, 3);
                            table.setValueAt("start", i, 6);
                        }
                        if (trd.getRead() > 0) { // 当前读取字节数
                            int k = (int) trd.getRead() / 1024;
                            int p = k * 100 / (int) (trd.getLen() / 1024);
                            table.setValueAt(String.valueOf(p), i, 4);
                        }                    if (trd.getFlag() == 2) { //图片下载完成
                            table.setValueAt("go", i, 6);
                            break;
                        }