读flashget有感

主类:MainFrame

1)导航树:创建树中结点(组合)

2)下载表格:新建表格、表格模型、将表格模型赋给表格

3)信息列表:用List<Info>装了四个Info,然后提交给JList

4)新建任务界面  界面(Box)、按钮的监听

5)工具栏(5Action)新任务、开始、暂停、删除任务、移除已经完成任务

6)悬浮窗口:主窗口、弹出菜单(与托盘同) 内嵌在主类中

7)任务栏图标(6个菜单):打开/关闭、新任务、开始、暂停、移除完成、退出

监听器:

1)点击表格,鼠标监听器,列表显示信息。

2)点击导航树,鼠标监听器,得到选择节点,刷新表格,表格得到模型,模型重设资源对象。

3)窗口关闭监听。

4)任务栏图标的监听。

开始所有任务调用DownloadHandlerresumeDownload()。

删除已下载完的,就从DownloadContext中的resources删除该项。

退出前,先序列化保存。这样可以断点续传

二:

2)导航树类

      节点提交给树、设置树、设置渲染器。

3)树渲染器类  设置该JLabel的图标和名称

三:

4)表格类  设置表格的列宽、设置表格列的渲染器

5)表格模型类 表格所拥有的列名数组、资源集resources、根据资源集返回某单元格值

6)表格渲染器类  设置一个单元格中的显示

7)进度条类 (也是一个渲染器)

四:

8)新建任务界面类  创建资源,调用DownloadHandler类的doDownload(r)方法。

9)悬浮窗类  菜单和监听

五:

10)节点类:

共同父类:DownloadNode

任务TaskNode、正在下载DownloadingNode、下载失败FailNode、下载完成FinishNode

六:

11Info信息类:信息列表中的信息对象。

七:

12)资源对象:

Resource属性:关联的类part

1)资源id。(2)地址url。(3)保存目录filePath。(4)改后的名称fileName

5)状态state。(6)文件大小size。(7)下载起始时间downloadDate

8)进度progress.9)下载速度speed。(10)使用的时间costTime11)剩下的时间spareTime

12)拆分的块集合parts13)线程数threadSize。(14)上一次下载的大小 preLength

根据每个块,计算出当前的总长度currentLength

计算下载速度speed  即:当前的总长度-上一次长度

通过Http的连接(根据url),得到文件总共的大小size

计算进度progress    当前的总长度/总大小

计算剩余时间spareTime  总大小-当前的总长度/速度

设置状态时,要原状态销毁,新状态初始化执行。

 

八:工具集

13)文件工具类

      1)根据地址名得到文件名。(2)删除part临时文件

14)图片工具类

     存储图片的地址,返回图片信息。

15)日期工具类

     给时间格式化

九:

15ContextHolder上下文支持类:

      包含 DownloadContextDownloadHandler

      为了保证这两个对象都只有一份,并且随时随地都可用。

 

十:DAO

16)下载工具上下文 DownloadContext

包含5个状态当前程序的资源集List<Resource>  resources

两种方式来访问:

1)根据状态,得到资源集resources

2)根据资源id查找具体资源

17)下载状态类

   接口TaskState、抽象类AbstractState

   连接Connecting、下载Downloading完成Finished失败Failed暂停Pause

   完成FinishedstopTimer(resource)停止CountTimeTask

   失败FailedstopTimer(resource)停止CountTimeTask

   暂停PausestopTimer(resource)停止CountTimeTask

十一:

18)下载处理类 DownloadHandler

1doDownloadr)开启时间计算任务CountTimeTask,给每part分配任务,开启线程

2stopTimerr)就是停止了时间增长。resumeDownloadr)继续原来任务。

19)下载的线程类DownloadThread

      从服务器读资源到本地。资源的状态的设定。主要的逻辑。

十二:

20Part拆分成的块。

开始位置begin、这个part文件的长度length

Part已经下载的文件长度currentLength、每个Part对应的文件名partName自动生成)。

 

注:

Action对象

1)容器类JMenuJToolBar会为Action对象自动创建组件,并注册监听器。

      jToolBar.add(action);

2Swing组件JButtonJCheckBox用构造方法创建。

      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)使用的时间costTime11)剩下的时间spareTime

12)拆分的块parts13)线程数threadSize。(14)上一次下载的大小 preLength

对于Resource对象,需要外部传进来赋值的成员就用set方法,否则自己生成。对于状态的设置(起始就是状态的转变),因为设置状态,还要对状态进行处理,所以编写了代码。

自动生成的idUUID.randomUUID().toString();

 

根据url作连接:

URL  resourceURL = new URL(this.url);

HttpURLConnection urlConnection = (HttpURLConnection)resourceURL.openConnection();

urlConnection.connect();

this.size = urlConnection.getContentLength();

urlConnection.disconnect();

 

显示出资源:表格的模型、ContextHolderDownloadContextResource

资源在模型和上下文DownloadContext中是顺序存储的。

行是具体哪个资源,列是资源的成员。

设定资源:主面start()、DownloadHandlerresumeDownloaddoDownloadDownloadThread

所谓刷新表格,就是重设资源对象。

表格的getValue()方法调用了模型的getValue()方法。

 

DownloadContext上下文对像写到序列化文件中。

反序列化完成后,将DownloadContext中的resources存到模型中,然后表格刷新。

 

每个资源都要有个花费的时间,故有个计算时间的任务。

urlConnection.getInputStream();

流需要关闭、连接需要关闭、文件需要关闭。

下载过程:服务器端到流InputStream,流到内存缓冲区buffer,在到文件RandomAccessFile

最后合并part文件。

你可能感兴趣的:(DAO,swing)