基于http的多线程下载器毕业论文(编辑修改稿)内容摘要:

S 日志中显示。 5xx服务器错误 服务器由于遇到错误而不能完成该请求。 500内部服务器错误。 504网关超时。 505HTTP 版本不受支持。 JAVA Java 简介 Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即JavaSE, JavaEE, JavaME)的总称。 Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人 PC、数据中心、游戏控制台、科 学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 在全球云计算和移动互联网的产业环境下, Java 更具备了显著优势和广阔前景。 Swing 简介 Swing 是一个用于开发 Java 应用程序用户界面的开发工具包。 它以抽象窗口工具包( AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。 Swing开发人员只用很少的代码就可以利用 Swing 丰富、灵活的功能和模块化组件来创建优雅的用户界面。 Swing 组件是在 AWT 组件基础上发展而来的轻量级组件,与 AWT 相比不但改湖南科技大学本科生毕业设计(论文) 8 进了用户界面,而且所需的系统资源更少; Swing 是纯 Java 组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。 Swing 组件的类体系结构如图 所示: 图 Swing 组件体系结构 图 创建图形界面的步骤: 导入 Swing 包 选择界面风格 设置顶层容器 设置按钮和标签 将组件放到容器上 为组件增加边框 处理事件 、 辅助技术支持 线程和多线程 线程的基本概念 线程( thread)是 进程 中某个单一顺序的控制流。 也被称为轻量进程( lightweight processes)。 计算机科学术语,指运行中的程序的调度单位。 线程,有时被称为轻量进程 (Lightweight Process, LWP),是程序执行流的最小单元。 一个标准的线程由线程 ID,当前指令指针 (PC),寄存器集合和堆栈湖南科技大学本科生毕业设计(论文) 9 组成。 另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。 一个线程可以创建和撤消另一个线程 ,同一进程中的多个线程之间可以并发执行。 由于线程之间的相互制约,致使线程在运行中呈现出间断性。 线程也有就绪、阻塞和运行三种基本状态。 每一个程序都至少有一个线程,那就是程序本身。 线程是程序中一个单一的顺序控制流程。 在单个程序中同时运行多个线程完成不同的工作,称为多线程。 多线程的优点 CPU 是以时间片的方式为进程分配 CPU 处理时间的,当一个进程以同步的方式去完成几件事情时,此进程必须完成了第一件事情以后再做第二件事,如此按顺序地向 CPU 请求完成要做的事情。 在此单线程的工作模式下,如果把CPU 看作是一共有 100 个时间片的话, CPU 可能一直都只是花了其中的 10 个时间片来处理当前进程所要做的事情,只是用到了 CPU 的 10%的时间片,而其他时间都白白浪费了,当然,实际上 CPU 的工作模式还是做完一件事以后再去做另一件事,只是 CPU 的处理速度非常快,很快就处理完成所请求的情事。 采用多线程可以很明显的提高 CPU 的利用率。 如当前进程要完成三件事情 3,那么 CPU 会分别用 10%的时间来同时处理这 3 件事情,从而让 CPU的使用率达到了 30%,大大地 提高了 CPU 的利用率。 多线程在处理一些特殊的场合其优势更加明显(如下载器)。 Java 线程的实现 Java 线程的实现一般有两种方式:第一种是继承 Thread 类;第二种是实现Runnable 接口。 湖南科技大学本科生毕业设计(论文) 10 第三章 系统分析与设计 功能需求 由于丰富的网络资源,现在的用户下载需求量也越来越大,同时对下载软件处理资源速度的要求也越来越高。 而多线程程序设计可以很好的解决程序并发的问题。 在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。 由于下载资源的时间长短不一,可能很短也可能比较长。 如果在一段很长的下载时间段中出现了意外情况,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。 这些原因都会导致下载的 中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。 断点续传就很好的解决了这样的问题,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。 简单来说可以将需求整理为如下: 可视化界面; 支持多线程下载; 支持断点续传; 系统功能模块的 划分 系统主要包含如下几个类: MainFrame: 负责定义可视化界面,定义主界面的监听事件。 DownTableModel: 继承 AbstractTableModel 类,此类对象用于处理表格。 GlobalData: 用于保存全局数据。 NewDownload: 创建新建下载的页面,定义新建下载页面的监听事件。 Download: 做下载前的准备,包括连接资源,实现多线程,分配每个线程的下载量。 DownloadThread: 实现下载,并进行数据流的 I/O 操作。 LoadProperty: 保存当界面关闭时的下载信息和读取界面打开时的下载信息。 其中每个类可以看做是一个功能模块。 湖南科技大学本科生毕业设计(论文) 11 系统流程图 系统整体运行流程图:如图 所示: 开 始查 看 是 否 有 未完 成 任 务监 听 主 界 面 事 件否导 入 未 完 成 的 下 载任 务是新 建 下 载 新 建 下 载 任 务开 始 下 载 开 始 下 载 任 务否是是暂 停 下 载否暂 停 下 载 任 务是退 出是继 续 监 听 页 面 事 件否保 存 页 面 未 完 成 下载 信 息退 出输 入 U R LU R L 是 否 可用否选 择 存 储 位 置是选 择 线 程确 定 下 载创 建 下 载 实 体 进 行下 载是否删 除 下 载 删 除 下 载 任 务否否创 建 下 载 线 程停 止 下 载 线 程删 除 下 载 实 体 , 关闭 下 载 线 程图 系统流程图 湖南科技大学本科生毕业设计(论文) 12 系统结构用例图 根据系统需求分析,系统需实现新建下载、暂停下载、开始下载、删除下载四个基本功能。 当系统在存在未完成任务退出时需保存下载任务的断点信息。 同时启动程序时应导入未完成任务的下载信息。 系统结构用例图如图 所示: 图 系统结构用例 图湖南科技大学本科生毕业设计(论文) 13 第四章 系统实现 开发环境构建 开发应用程序所需要的环境: : Windows 或 Linux 系统。 : Eclipse。 : JDK。 本应用使用的开发平台为 Win7,所使用的开发环境为 ,所用到的开发工具包有。 JDK 和 Eclipse 的安装 第一步:安装 Java 安装完成 jdk 以后最重要的是配置环境变量: 在 ―我的电脑 ‖上点右键 —―属性 ‖—―高级 ‖— ―环境变量 (N)‖; 在 “系统变量 ”中,设置 3 项属性, JAVA_HOME,PATH,CLASSPATH(大小写无所谓 ),若已存在则点击 “编辑 ”,不存在则点击 “新建 ”。 JAVA_HOME 为java 的安装路径,如: C:\Program Files\Java\。 Path 中加入“ %JAVA_HOME%/bin。 ‖Classpath中加入“ .。 % JAVA_HOME%\lib。 ‖ 最后在 DOS 下进行测试:输入 java 、 javac、 java –version 等命令,分别输出如图 ,图 ,图 则表示配置成功。 图 湖南科技大学本科生毕业设计(论文) 14 图 图 第二步:安装 Eclipse 从网站 Eclipse 版本,解压至相应的位置。 Eclipse 在使用时会自动检测 Java 运行时环境。 MainFrame 模块设计 MainFrame 模块结构 MainFrame 模块是界面和按钮监听事件的集合,用户每按一个按钮系统就会执行不同的事件。 如下是 MainFrame 模块的结构图 : 湖南科技大学本科生毕业设计(论文) 15 下 载 器 界 面新 建 下 载 按 钮开 始 下 载 按 钮暂 停 下 载 按 钮 删 除 下 载 按 钮触 发 新 建 下 载 事 件 触 发 开 始 下 载 事 件触 发 暂 停 下 载 事件触 发 删 除 下 载 事 件 图 MainFrame 模块结构图 主界面设计 MainFrame 可视化界面主要定义了如下一些组建: JToolBar :用于装载(容纳)按钮; JButton :定义新建下载,开始下载,暂停下载等按钮; JTable:以表格形式显示下载条目; JScrollPane :定义带滚动条的文本区域,用于装载 JTable; JProgressBar:定义一个下载进度条。 主界面运行图如图 所示: 图 主界面 当鼠标右键单击 JTable 表格中某一选择的下载项,需要弹出一个包括三个菜单项(暂停、开始、删除)的菜单。 如图 所示: 湖南科技大学本科生毕业设计(论文) 16 图 菜单项 定义主界面关键代码: private void initFrame(){ (900,600)。 //1280*800 (this)。 //居中显示 (EXIT_ON_CLOSE)。 c=()。 } private void initComponent(){ horizon_bar=new JToolBar()。 //创建各个按钮并设置按钮的名字 new_btn=new JButton(新建下载 )。 start_btn= new JButton(开始下载 )。 pause_btn = new JButton(暂停下载 )。 del_btn = new JButton(删除下载 )。 //定义 table table=new JTable()。 =new DownTableModel(table)。 ()。 ().getColumn(4).setCellRenderer(new DownCellRenderer())。 //设置进度条 scrollPane = new JScrollPane(table)。 } private void addComponent(){ //绑定组件 (new_btn)。 (start_btn)。 (pause_btn)。 (del_btn)。 ()。 (horizon_bar,)。 (scrollPane,)。 } 湖南科技大学本科生毕业设计(论文) 17 主界面实现了下载进度条,我们需要设定进度条外观的各种属性,关键代码如下: public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) { //将进度条中不断变化的值强制转换为 int型 (((())))。 (100)。 //设置进度条的最大值为 100 (0)。 // 设置进度条的最小值为 0 ()。 // 设置进度条的颜色为蓝色 //该属性确定进度条是否应该呈现进度字符串 (true)。 //设置进度条水平放置 ()。 return this。 } MainFrame 组件监听事件 MainFrame 中定义了几个按钮,点击每个按钮都会产生相应的动作,这就用到了我们的监听事件。 点击新建下载按钮:下载器要弹出新建下载框; 点击暂停下载按钮:将选中的下载条目暂停; 点击开始下载按钮:将选中的下载条目重新开始下载; 点击删除下载按钮:将选中的下载条目删除,放入。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。