📄 listenthread.java
字号:
package download;
/**
*功能:监听文件线程下载状态,该线程创建定时器,每秒执行一次,用于计算下载速度
*/
import java.util.Timer;
import java.util.TimerTask;
public class ListenThread
{
private DownLoadInfo downInfo;
private Timer tmr;
private boolean isFinished;
private boolean isError;
private DownLoadThread[] down;
public ListenThread(DownLoadInfo downInfo, DownLoadThread[] down)
{
this.downInfo = downInfo;
this.down = down;
tmr = new Timer();
tmr.schedule(new MyTimerTask(), 0, 1000);
}
/**
* 功能:监听下载线程是否结束或出错 返回值:无
*/
final private void listenFinished()
{
boolean flag = true;
for (int i = 0; i < down.length; i++)
{
if (down[i].isFinished() == false)
{
flag = false;
}
if (down[i].isError() == true)
{
isError = true;
break;
}
}
isFinished = flag;
}
/**
* 功能:内部类实现定时器
*/
class MyTimerTask extends TimerTask
{
public void run()
{
// 获取线程状态信息
listenFinished();
if (isFinished)// 如果下载结束,关闭定时器,更新文件下载信息标志
{
tmr.cancel();
downInfo.setFinished(true);
System.out.println("资源[" + downInfo.getDownURL()
+ "]下载完毕!,文件保存在" + downInfo.getSaveFileName());
}
else
// 如果还在下载中,察看线程下载是否出错
{
if (isError)// 如果出错,关闭定时器,更新文件下载标志,以便结束所有下载线程
{
tmr.cancel();
downInfo.setError(true);
System.out
.println("资源[" + downInfo.getDownURL() + "]下载错误!");
}
else
// 如果没出错,计算下载速度
{
downInfo.setDownSpeed();
System.out.println("资源[" + downInfo.getDownURL() + "]文件长度="
+ downInfo.getFileLength() + "byte 已下载长度="
+ downInfo.getDownLength() + "byte 下载速度="
+ downInfo.getDownSpeed() + "k 下载进度="
+ downInfo.getDownProgress());
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -