是这样的:我的代码从互联网上下载一个文件,还显示它的大小和文件名。
问题是,当我下载该文件时,该 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