线程以显示 Java 中的进度


情况

是这样的:我的代码从互联网上下载一个文件,还显示它的大小和文件名。

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

我什至尝试使用 swingworker 类放置一个进度条(我几天前问过请求信息,我不明白如何在我的代码中"集成"您之前给我的 swingworker 方法。有人告诉我,在这种情况下,根本不建议使用马蒂斯。所以我不能使用摇摆工人。

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

这可能不是您直接问题的原因,但代码如下:

    } catch (MalformedURLException ex) {
    } catch (IOException ioe) { 
    }

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

只是不要这样做!

如果您不知道如何处理检查的异常,则声明与方法签名中的thrown一样。 不要随便扔掉它。

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();

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

 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

相关内容

  • 没有找到相关文章

最新更新