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();
}
int k = (int) trd.getRead() / 1024;
int p = k * 100 / (int) (trd.getLen() / 1024);
table.setValueAt(String.valueOf(p), i, 4);
}显示进度条的图片下载完成,进度条没显示完成
int k = trd.getRead() / trd.getLen() ;这样?
这个永远不会错, 显示的时候,再转成K,内部计算全部用字节!啥意思long k = trd.getRead() / trd.getLen() ;
long p = trd.getRead() / trd.getLen();
p = p / 1024;
table.setValueAt(String.valueOf(p), i, 4);是这样?如果是这样,进度都没显示了
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}这样就可以每次都到95%左右,呵就是不能到 100%long p = trd.getRead() * 100 / trd.getLen();我的公式
你的这个分子比分母小,自然是如果两个都是整数的话,结果就是0了,用:
trd.getRead() * 100 / trd.getLen()现实的时候再向后面加一个%
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;
}