写的一个下载工具,其中的 JTable 只要加上计时器调用 updateUI()给他刷新界面,程序就卡的不行,这是什么原因呢?

解决方案 »

  1.   

    package index.download.table;import java.util.Date;
    import java.util.List;import index.download.Context;
    import index.download.Source;import javax.swing.table.*;public class ExtendsAbstractTableModel extends AbstractTableModel{

    private static final long serialVersionUID = 1L;
    private List<Source> sources=Context.downloadContent.sources;
    public String getColumnName(int column){
        String s=null;
    switch(column){
    case 0:
    s="状态";
    break;
    case 1:
    s="文件名称";
    break;
    case 2:
    s="文件大小";
    break;
    case 3:
    s="进度";
    break;
    case 4:
    s="下载速度";
    break;
    case 5:
        s="已下载";
        break;
    case 6:
    s="已用时间";
    break;
    case 7:
    s="剩余时间";
    break;
    }
    return s;
    }
    public int getColumnCount(){
    return 5;
    }
    public int getRowCount(){
    return this.sources.size();
    }
    public Object getValueAt(int row,int column){
    if(column==0){
    if(this.sources.get(row).Finish())
    return "已完成";
    else
    return "正在下载";
    }
    if(column==1){
    return this.sources.get(row).getFileName();
    }
    if(column==2){
    return this.sources.get(row).getFileLength()/1024+"KB";
    }
    if(column==3){
    return this.sources.get(row).getProgress();
    }
    if(column==4){
    return this.sources.get(row).getSpeed()+"k/s";
    }
    return 21;
    }
    }getValueAt()里如果返回简单的字符串,不卡
    但只要返回函数,他就卡,而且越来越卡。
      

  2.   

    那要检查你这些函数计算的速度如何了,最好是不要实时计算结果。把返回的数据保存成一个二维数组好了,另外用其它线程负责更新这个二维数组。尽量不要再GUI主线程中做任何计算操作。