需求:按文件名列表下载相应的文件,下载完后退出线程
我的做法是这样的
读取文件列表,将列表封装在Vector中
循环,下载完后,从Vector中去除下载完的对象 removeElementAt(i)
但是这样本来需要下载50个文件 不知道怎么调用removeElementAt(i)这个方法以后就变成下载26个文件了
不解,求大侠指点
public static void main(String[] args)
    {
        String [] fileList;
        fileList = new Test1().getFileList();
        Vector vcr = new Vector(fileList.length);
        for(int i=0;i<fileList.length;i++)
        {
            vcr.addElement(fileList[i]);
        }
        System.out.println(vcr.size());
        for(int j=0;j<vcr.size();j++)
        {
            String tmpStr = vcr.elementAt(j).toString();
            System.out.println(j + ":" + tmpStr);
            vcr.removeElementAt(j);
            vcr.trimToSize();
        }
}
 
有没有更好的方法呀

解决方案 »

  1.   

    vcr.removeElementAt(j);
    你remove掉了,那么vcr的size就变了呀。后面的元素的位置全变了呀。你可以采取始终删除最后面的那个的方式
      

  2.   

    for(int j=0;j<vcr.size();j++)
            {
                String tmpStr = vcr.elementAt(j).toString();
                System.out.println(j + ":" + tmpStr);
                vcr.removeElementAt(j);
                vcrvcr.size();
    每次都在变小,当然就减半了啊
      

  3.   

    是不是需要线程同步,你必须等到获取完50个文件列表过程之后,才能用removeElementAt()删除。不然,在你加入的文件和删除文件的时候不同步,所以才。。
    以上只是猜测,具体还得看另外的代码
      

  4.   

    我是下载做了判断. 如果下载成功就从Vector里去除该元素,执行下一个元素的下载操作
    直到Vector元素空了就退出线程
      

  5.   

    如果不用Vector 还有更好的封装方法吗
      

  6.   

    这个线程destroy();后
    可能到某一时段又要重新start()
    另外一个线程就是控制这个线程的启动