主要类别:主框架
1、导航树:创建树中的节点(组合)
2、下载表单:将新表单、表单模型、表单模型分配给表单
3、信息列表:用ListInfo加入四个Info,提交给JList。
4 )新任务界面(Box )、按钮拦截
5、工具栏(5个动作) :新任务、开始、暂停、删除任务、删除已完成的任务
6、浮动窗口:主窗口,弹出菜单(与托盘相同)嵌入在主类中
7、任务栏图标(6个菜单)打开/关闭,新任务,开始、暂停、删除完成、结束
监听程序:
8、点击表单,用鼠标点击监听器,在列表中显示信息。
2 )单击导航树,鼠标单击监听程序,得到选择节点,更新表,得到表模型,模型重置资源对象。
3、关闭窗口拦截。
4、任务栏图标拦截。
启动所有任务并调用download处理程序的resumeDownload ()。
下载完成后,从download上下文资源中删除项目。
请在退出前序列化并保存。 现在断点继续。
1 :
(二)导航树类
将节点提交到树中,设置树,然后设置渲染器。
(三)树渲染器的类设置其JLabel的图标和名称
3 :
(四)表类设置表列宽,设置表列的渲染器
(五)从表模型表具有的列名数组、资源集资源、资源集中返回某个单元格值
(六)表渲染器类设置一个单元格的显示
(七)进度条类(也是渲染器) )。
4 :
(八)新建任务接口类,调用DownloadHandler类的dodownload(r )方法。
(九)浮动窗类菜单和拦截
5 () ) ) )。
(十)节点类:
通用父类:下载节点
下载任务任务节点、下载节点时,下载失败的故障节点、finish节点下载完成
6 :
(十一)信息类)信息列表中的信息对象。
7 :
(十二)资源对象:
资源属性:关联的类部件、
)1)资源id。 )2)地址url。 )3)保存目录文件路径。 (4)变更后的名称fileName
)5)状态状态。 (6)文件大小size。 (7)下载开始时间下载日期
(8)进度Progress.)9)下载速度speed。 (10 )使用的时间costtime ) 11 )剩馀的时间spareTime
) 12 )分割的块集合parts ) 13 )线程数threadSize。 ) 14 )上次下载大小的预长度
为每个块计算当前全长currentLength。
计算下载速度speed。 即,当前全长-上次长度
通过Http连接(通过url )获得文件的总大小size。
计算进展情况后进入进度。 当前总长度/总大小
计算剩馀时间间隔时间。 总大小-当前总长度/速度
在设定状态的情况下,放弃原来的状态,初始化新的状态并执行。
(八)成套刀具
(十三)文件工具类
)1)从地址名称中获得文件名。 )2)删除部件临时文件
(14 )图像工具类
保存图像的地址,并返回图像信息。
(十五)日期工具类
格式化时间
九:
(15 )上下文支持类:
包括下载上下文和下载处理程序
这两个对象都只有一个人,是为了随时随地都能使用。
(十)刁系
(16 )下载工具上下文下载上下文
包含五种状态的当前程序的资源集列表资源
用两种方法访问。
(1)根据状态,得到资源集资源
)2)根据资源id查找具体资源
(17 )下载状态类
接口TaskState,抽象类AbstractState
连接到连接、下载、完成、失败、暂停Pause
完成:停止时间(资源)。 停止计数任务
失败的故障:停止时间(资源)。 停止计数任务
pause :暂停停止时间(资源)。 停止计数任务
十一:
(18 )下载处理类下载处理程序
(1)打开doDownload(r )时间计算任务CountTimeTask,为每个部件分配任务,并打开线程
)2) stopTimer(r ) r )是停止了时间的增加。 resum
eDownload(r)继续原来任务。(19)下载的线程类DownloadThread
从服务器读资源到本地。资源的状态的设定。主要的逻辑。
十二:
(20)Part拆分成的块。
开始位置begin、这个part文件的长度length、
该Part已经下载的文件长度currentLength、每个Part对应的文件名partName(自动生成)。
注:
Action对象
(1)容器类JMenu、JToolBar会为Action对象自动创建组件,并注册监听器。
jToolBar.add(action);
(2)Swing组件JButton、JCheckBox用构造方法创建。
jButton = new JButton(action);
输入信息:(1)下载地址(2)保存目录(3)文件名(4)线程数
悬浮窗口与任务栏图标都是调用主类中的几个方法。
图片加载步骤:图片路径(String),得到File,通过ImageIO()类读取得到BufferedImage对象。
得到选择树的节点信息步骤:
先是treePath = navTree.getSelectionPath();
然后node = (DefaultMutableTreeNode)treePath.getLastPathComponent();
最后(DownloadNode)node.getUserObject();
Resource属性:
(1)资源id。(2)地址url。(3)保存目录filePath。(4)改后的名称fileName
(5)状态state。(6)文件大小size。(7)下载时间downloadDate
(8)进度progress.(9)下载速度speed。(10)使用的时间costTime(11)剩下的时间spareTime
(12)拆分的块parts(13)线程数threadSize。(14)上一次下载的大小 preLength
对于Resource对象,需要外部传进来赋值的成员就用set方法,否则自己生成。对于状态的设置(起始就是状态的转变),因为设置状态,还要对状态进行处理,所以编写了代码。
自动生成的id。UUID.randomUUID().toString();
根据url作连接:
URL resourceURL = new URL(this.url);
HttpURLConnection urlConnection = (HttpURLConnection)resourceURL.openConnection();
urlConnection.connect();
this.size = urlConnection.getContentLength();
urlConnection.disconnect();
显示出资源:表格的模型、ContextHolder、DownloadContext、Resource。
资源在模型和上下文DownloadContext中是顺序存储的。
行是具体哪个资源,列是资源的成员。
设定资源:主面start()、DownloadHandler的resumeDownload、doDownload、DownloadThread
所谓刷新表格,就是重设资源对象。
表格的getValue()方法调用了模型的getValue()方法。
将DownloadContext上下文对像写到序列化文件中。
反序列化完成后,将DownloadContext中的resources存到模型中,然后表格刷新。
每个资源都要有个花费的时间,故有个计算时间的任务。
urlConnection.getInputStream();
流需要关闭、连接需要关闭、文件需要关闭。
下载过程:服务器端到流InputStream,流到内存缓冲区buffer,在到文件RandomAccessFile。
最后合并part文件。