-1

情况如下:我的代码从 Internet 下载文件,还显示其大小和文件名。

问题是,当我下载该文件时,该 JTextArea 中没有出现任何内容,并且框架就像“冻结”,直到下载完成。

我什至尝试使用 swingworker 类放置进度条(几天前我问过请求信息,但我不明白如何在我的代码中“集成”你之前给我的 swingworker 方法。有人告诉我不推荐使用 Matisse在那种情况下根本没有。所以我不能使用swingworker。

我一直在研究,我认为适合我的方法是使用线程。有或没有进度条。只是找简单的代码,我是初学者,谢谢

4

3 回答 3

3

这可能不是您的直接问题的原因,而是这样的代码:

    } catch (MalformedURLException ex) {

    } catch (IOException ioe) { 

    }

是一场等待发生的事故。如果发生任何这些异常,您已经告诉应用程序静默忽略它们

只是不要这样做!

如果您不知道如何处理已检查的异常,请thrown在方法签名中声明。不要只是把它扔掉。

于 2013-09-28T01:50:10.693 回答
0
package org.assume.StackOverflow;

import java.io.File;

public class Progress implements Runnable
{
    private File file;
    private long totalSize;
    private int currentProgress;

    public Progress(String filePath, long totalSize)
    {
        this(new File(filePath), totalSize);
    }

    public Progress(File file, long totalSize)
    {
        this.file = file;
        this.totalSize = totalSize;
        new Thread(this).start();
    }

    public int getProgress()
    {
        return currentProgress;
    }

    @Override
    public void run()
    {
        while (file.length() < (totalSize - 100))
        {
            currentProgress = (int) (file.length() / totalSize);
        }
    }
}

如何使用它:

new Thread(new Progress(file, totalSize)).start();
于 2013-09-28T01:42:14.870 回答
0

这些行实际上正在执行下载和写入

 while (b != -1) {
       b = in.read();
       if (b != -1) {
           out.write(b);
       }
 }

添加进度添加一些东西:

 while (b != -1) {
           b = in.read();
           if (b != -1) {
               downloaded += b;
               out.write(b);
           }
     }

进步是

downloaded / conn.getContentLength() * 100
于 2013-09-28T02:07:48.963 回答