/*
* SubTask.java
*
* Created on 2007年11月17日, 下午4:48
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.tewang.download.manager;
import com.tewang.download.common.DLConstant;
import com.tewang.download.common.Util;
import com.tewang.download.sounds.Sound;
import com.tewang.download.submanager.DownThread;
import com.tewang.download.submanager.FileInfo;
import com.tewang.download.submanager.FilePosition;
import com.tewang.download.submanager.SubThread;
import com.tewang.download.userinterface.TaskManagerListener;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author tewang
*/
public class SubTask implements DLConstant, Runnable, Serializable {
public static final long serialVersionUID = 20071211L;
private TaskManagerListener tml;
private int type;//任务类型 (正在下载,已经下载,垃圾箱)
private int status = ONDOWNLOAD;//任务状态(正在下载,暂停下载,下载失败,下载完毕)
private String fileName;//文件名称
private long length;//文件大小
private long downLength;//文件已经下载的大小
private int progress;//文件进度
private String resource;//资源
private long speed;//下载速度
private int restTime;//剩余时间
private int takeTime;//用时(已经花了的时间)
private String fileType;//文件类型
private String note;//文件注释
private Date date;//下载日期
private String blog;//博客
private FileInfo fileInfo = null;//文件信息
private List<FilePosition> blockList;//把文件分块,每块文件的起始位置和终点位置
private List<SubThread> subThreadList;//每个子线程
private boolean stop = true;//任务是否被停止,任务默认是停止的
/** Creates a new instance of SubTask */
public SubTask(FileInfo fileInfo, int type, TaskManagerListener tml) {
this.type = type;
this.tml = tml;
this.fileInfo = fileInfo;
this.fileName = fileInfo.getFile().getName();
try {
length = this.getFileSize();
blockList = new ArrayList<FilePosition>();
subThreadList = new ArrayList<SubThread>();
computeBlockList();
initDownThread();
} catch (Exception ex) {
Logger.getLogger(DownThread.class.getName()).log(Level.SEVERE, null, ex);
}
new Thread(this).start();
startTask();
}
@Override
public String toString() {
return "任务类型:" + type + " 文件名称:" + fileName + " 文件大小:" + length + " 文件已经下载的大小:" + downLength +
"\n文件进度:" + progress + " 资源:" + resource + " 下载速度:" + speed + " 剩余时间:" + restTime +
"\n用时(已经花了的时间):" + takeTime + " 文件类型:" + fileType + " 文件注释:" + note +
"\n 下载日期:" + date + " 博客:" + blog + " 文件信息:" + fileInfo;
}
/**
* 已经下载的大小
* @param readBytes
*/
public synchronized void addDownLength(int readBytes) {
downLength = downLength + readBytes;
}
// /**
// * 重新下载要清空相关的内容
// */
// public void clearConent() {
// status = ONDOWNLOAD;//要把状态变为正在下载
// downLength = 0;//文件已经下载的大小
// progress = 0;//文件进度
// speed = 0;//下载速度
// restTime = 0;//剩余时间
// takeTime = 0;//用时(已经花了的时间)
// }
public void run() {
long lastSecondLength = downLength;//前一秒文件已经下载的大小
while (!stop) {
try {
if (length != 0) {
progress = (int) (100 * downLength / length);
}//计算下载进度
speed = downLength - lastSecondLength;
lastSecondLength = downLength;
if (speed != 0) {
restTime = (int) ((length - downLength) / speed);
}
takeTime++;
if (subThreadList.size() == 0) {//说明任务已经完成....
doFinishDownLoad();
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 下载完成所要处理的事情
*/
private void doFinishDownLoad() {
//开始播放声音
AudioClip au = Applet.newAudioClip(Sound.class.getResource("download-complete.wav"));
au.play();
// int i = 0;//对文件重新命名,如是重新命名失败,就要重试,重试次数限制三次
// reNameFile(i);
//设置下载状态为已经完成.
status = FINISH;
//关闭当前主线程
stop = true;
this.setDate(Calendar.getInstance().getTime());//设置下载完成的时间
boolean b = tml.moveTask(this, BEEN_DOWNED);//把任务移到"已下载"里
}
private void print(List<FilePosition> list) {
for (FilePosition p : list) {
System.out.println(p);
}
}
/**
* 把文件分块,每块文件的起始位置和终点位置
*/
private void computeBlockList() {
int block = getFileInfo().getBlock();
for (int i = 0; i < block; i++) {
long startPos = (long) (i * length / block);
long endPos = 0;
if (i == (block - 1)) {
endPos = length;
} else {
endPos = (i + 1) * length / block;
}
FilePosition fp = new FilePosition(startPos, endPos);
blockList.add(fp);
}
}
private void initDownThread() throws FileNotFoundException {
for (int i = 0; i < getFileInfo().getBlock(); i++) {
SubThread st = new SubThread(fileInfo.getFile(), getFileInfo().getUrl(), blockList.get(i), i, this, subThreadList);
subThreadList.add(st);
}
}
/**
* 获得文件长度
* @return
*/
public long getFileSize() {
int nFileLength = -1;
try {
URL url = getFileInfo().getUrl();
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
// httpConnection.setRequestProperty("User-Agent", "NetFox");
int responseCode = httpConnection.getResponseCode();
if (responseCode >= 400) {
System.err.println("responseCode:" + responseCode);
return -2; //-2 为Web服务器响应错误
}
String sHeader;
for (int i = 1;; i++) {
sHeader = httpConnection.getHeaderFieldKey(i);
if (sHeader != null) {
if (sHeader.equals("Content-Length")) {
nFileLength = Integer.parseInt(httpConnection.getHeaderField(sHeader));
break;
}
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return nFileLength;
}
/**
* 删除任务
*/
private boolean remove() {
switch (type) {
case ON_DOWN:
return tml.moveTask(this, DUSTBIN);
case BEEN_DOWNED:
return tml.moveTask(this, DUSTBIN);
case DUSTBIN:
return tml.remove(this);
}
return false;
}
public int getType() {
return type;
}
public void setType(
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
swing写的迅雷界面 (219个子文件)
ToolBtnNormal.bmp 37KB
ToolBtnDisable.bmp 37KB
ToolBtnNormal.bmp 37KB
ToolBtnHot.bmp 37KB
ToolBtnDisable.bmp 37KB
ToolBtnHot.bmp 37KB
CfgBig.bmp 30KB
CfgBig.bmp 30KB
GlideHint.bmp 21KB
GlideHint.bmp 21KB
Menudisable.bmp 20KB
Menudisable.bmp 20KB
MenuNormal.bmp 20KB
MenuNormal.bmp 20KB
MenuHot.bmp 20KB
Menudisable.bmp 20KB
MenuHot.bmp 20KB
tb_community.bmp 11KB
tb_community.bmp 11KB
TaskStatus.bmp 11KB
TaskStatus.bmp 11KB
tb_resource.bmp 6KB
tb_resource.bmp 6KB
tb_SAFE.bmp 6KB
tb_SAFE.bmp 6KB
tb_popup.bmp 6KB
tb_popup.bmp 6KB
statusbar.bmp 5KB
statusbar.bmp 5KB
ConnectInfo.bmp 4KB
ConnectInfo.bmp 4KB
GlideCtrl.bmp 3KB
GlideCtrl.bmp 3KB
TaskCategory.bmp 3KB
TaskCategory.bmp 3KB
HeadSort.bmp 2KB
HeadSort.bmp 2KB
HelpBtn.bmp 1KB
HelpBtn.bmp 1KB
Thumbs.db 76KB
Thumbs.db 65KB
Thumbs.db 41KB
Thumbs.db 38KB
Thumbs.db 31KB
Thumbs.db 25KB
Thumbs.db 20KB
Thumbs.db 19KB
Thumbs.db 14KB
Thumbs.db 12KB
Thumbs.db 12KB
Thumbs.db 6KB
NewTaskDialog1.form 3KB
skin.ini 3KB
skin.ini 3KB
SubTask.java 15KB
XZDownLoad.java 15KB
NewTaskDialog.java 13KB
MyJMenuBar.java 13KB
MyJPopupMenu.java 11KB
AllTaskManager.java 10KB
OnTop.java 9KB
TaskManager.java 8KB
Util.java 7KB
ToolBarJLabel.java 5KB
StatusMessageJLabel.java 5KB
DownThread.java 5KB
OndownTableColumnModel.java 5KB
Pic.java 4KB
TestImage.java 4KB
TaskListener.java 4KB
MySystemTray.java 4KB
MyJTable.java 4KB
SubThread.java 3KB
NewTaskDialog1.java 3KB
BeenDownedTableColumnModel.java 3KB
DustbinTableColumnModel.java 3KB
Main.java 3KB
MyButtonUI.java 2KB
MergeFile.java 2KB
MyMutableTreeNode.java 2KB
DLConstant.java 2KB
DownloadThread.java 2KB
DLMain.java 2KB
MySystemTrayManager.java 2KB
OndownTableModel.java 2KB
TestPopupMenu.java 2KB
BeenDownedTableModel.java 2KB
MyJLabel.java 2KB
DustbinTableModel.java 2KB
UtilTest.java 2KB
MyMetalProgressBarUI.java 2KB
FileInfo.java 1KB
FilePosition.java 1KB
TableHeaderCellRenderer.java 1KB
TestZipStream.java 1KB
MyJTreeCellRenderer.java 1KB
MySystemTrayEvent.java 1016B
JtreeNode.java 986B
MyMetalSplitPaneUI.java 883B
TestSerializable.java 747B
共 219 条
- 1
- 2
- 3
chenggongxiong
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 用于构建 Web 应用程序的 Python 微框架 .zip
- Screenshot_20241123_213327_com_tencent_mm_MMWebViewUI.jpg
- 用于教学,学习 Python 3 的 Jupyter 笔记本.zip
- 用于执行 RPA 的 Python 包.zip
- opencv模板匹配加速原理源码和测试图像
- Screenshot_20241123_212743_com_tencent_mm_LauncherUI.jpg
- 修帝全伪实体v8(2).zip
- 用于在 Amazon SageMaker 上训练和部署机器学习模型的库.zip
- 用于与 Twilio API 通信并生成 TwiML 的 Python 模块 .zip
- Logisim16位ALU设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页