基于JAVA的飞鸽传书系统设计.doc
《基于JAVA的飞鸽传书系统设计.doc》由会员分享,可在线阅读,更多相关《基于JAVA的飞鸽传书系统设计.doc(36页珍藏版)》请在三一办公上搜索。
1、目 录1 绪论. 11.1本程序的开发背景. 11.2开发环境. 11.3 Java语言.11.4 关于Eclipse. 22 程序结构和设计思想. 42.1本文解决的主要技术问题. 42.2程序设计结构. 42.3程序设计思想. 53 程序分析和具体实现. 73.1目录选择器. 73.2重要图形界面模块的实现. 103.3任务栏托盘图标和任务栏弹出对话框. 173.4信息收发和文件传输的实现. 213.5使用外部程序包. 283.6发布程序. 331 绪论1.1 本软件的开发背景当今,是一个信息高度发达的时代,计算机无疑已经成为网络通信的主角,生活节奏的加快,使得人们对通信速度的要求越来越高
2、。对于在局域网内的计算机之间的数据交互,尤其是文件传输,通常,人们习惯于通过借助于移动存储介质,采取重复拷贝的方式来实现。这种传统文件传输方式存在诸多缺点,比如:1.消耗时间长,反复拔插存储介质过程繁琐;2.文件交互频繁,加速了计算机病毒的传播;3.虽然可以通过操作系统实现在局域网内的数据共享,但终因操作困难而使人们望而却步。在如此多困难之下,人们不禁会考虑,能不能通过软件来实现计算机之间的数据交互?答案是肯定的。本程序将针对这些问题进行设计。1.2 开发环境操作系统:Microsoft Windows XP程序语言:Java 2开 发 包:Java(TM) 2 Standard Editio
3、n (6.0)开发平台:Eclipse 3.0+Swing Designer+JRE6.01.3 Java语言Java平台演进到Java2后,分别针对不同领域的需求被分成三个版本,亦即J2EE、J2SE、J2ME。本程序使用J2SE。J2SE是Java的标准版本 (Java2 Standard Edition), 定位在客户端,主要用于桌面应用软件的编程。J2SE 包含那些构成Java语言核心类库。Java语言区别于其它编程语言的特点主要有: (1)平台无关性(2)安全性 (3)面向对象(4)分布式(5)键壮性本程序中,突出体现了Java语言的面向对象编程的特点,将对象实例化的模式贯穿到了程序
4、设计的始终,而且严格按照Java语言的跨平台特性设计程序,完全摆脱了windows操作系统的束缚。1.4 关于EclipseEclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具JDK。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Ecli
5、pse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、
6、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。图1-1为Eclipse3.0的编程界面。图1-1 Eclipse3.0的编程界面2 程序结构和设计思想2.1 本程序需要解决的主要技术问题1.提供友好的用户界面2.实现信息收发3.实现文件传输和文件夹传输4.为程序添加系统托盘图标5.保存用户设置信息2.2 程序设计结构本程序按照功能可分为两个层:界面层和网络通信层。其中界面层主要采用Java Swing编程技术编写用户界面,网络通信层采用Java Socket技术编写数据交互程序。随程序的容量不断扩大,在同一个目录下存放所有的代码和执行文
7、件,显得十分混乱,加大了不必要的工作量。因此,为了方便代码和其他资源文件的管理,本程序将所有的代码文件按功能分为一下几个功能包,它们实现的功能分别为:networker包:构建本程序的主窗体和系统托盘图标networker.about包: 提供用户帮助信息,介绍程序设计的相关信息ponent包: 包含程序设计中几个重要的自定义功能组件networker.directorychooser包: 实现目录选取对话框networker.panels包: 包含了主面板设计中需要用到的区域面板networker.panels.filepane包: 用于创建主面板中的文件发送区networker.syste
8、m包:完成本程序网络通信networker.taskbardialog包:构建任务栏弹出对话框2.3 程序设计思想网络编程的基本模型就是客户机到服务器模型,简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置。并去建立两者之间的联系,然后完成数据的通讯。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。目前,在互联网上比较常见的聊天软件通常都将程序分成两个部分使用,即客户机程序和服务器程序。客户机程序在网上发布供用户使用而服务器程序则只供服务器使用,一般不公开。采用这种模式可以方便管理员对所有用户进行管理,但它必须单独提供一台计算
9、机作为服务器。而对于在局域网内使用的聊天软件,由于计算机的数量有限,而且计算机之间的服务关系经常变化或者根本没有服务关系,采用这种模式就显得力不从心了。所以,综合考虑上述因素,本程序在服务关系上做了作了一个新的设计,就是将客户机程序和服务器程序绑定在同一个软件上。当程序启动时,服务器程序监听各自端口,只负责接受来自客户机的信息并向客户机发送文件,客户机程序只负责向服务器发送信息并接受来自服务器的文件。Java对C/S模型的支持有很多种API,本程序中运用的Java Socket编程包含两个方面:一是基于UDP协议的Java DatagramSocket和Java DatagramPacket,
10、二是基于TCP/IP协议的Java Socket和Java ServerSocket。Java DatagramSocket/DatagramPacket是包中用于UDP通信协议的类,其中DatagramSocket称为报文套接字,主要用于创建UDP通信中的报文套接字并发送报文,DatagramPacket称为数据报,主要用于装载用户即将发送的报文。Java中运用这两个类进行UDP通信,实现快速的不可靠的简单数据传输。本程序中收发用户消息和系统消息的工作都由它们来完成。Java Socket/ServerSocket是包中用于TCP/IP通信协议的类,其中Socket称为客户机套接字,用于创建
11、客户机程序,ServerSocket称为服务器套接字,用于创建服务器。Java中运用这两个类进行TCP/IP通信,实现面向数据链接的可靠数据传输,本程序中收发文件(文件夹)都是由这两个类来完成的。由于计算机之间利用Java Socket进行的信息收发和文件传输事先是没有约定,要完成这些工作必须在程序中制定一个协议。本程序采用发送命令字的方式通知计算机完成相应工作,具体实现本文将在后面的章节中作具体介绍。3 程序分析和具体实现3.1 目录选择器在当前所有版本的JDK中,都没有实现过windows风格的目录选取对话框,本程序考虑到保存文件的需要,重新定义了一个类似功能的目录选取对话框,并具有跨平台
12、特性。其效果图如图3-1:图3-1 目录选择器实现目录选择器的类文件配置在networker.directorychooser包中,其中包含3个类:(1)TreeCell类TreeCell类封装了一个java.io.File类,并分别通过4个方法返回了该File对象的文件名、文件图标、文件路径、File类本身。其构造函数如下:public TreeCell(File f)(2)DCTreeCellRenderer类DCTreeCellRenderer类重构了树形组件的节点UI,它继承自javax.swing.JPanel,并实现了TreeCellRenderer接口,重写方法:public C
13、omponent getTreeCellRendererComponent(JTree tree,Object o,boolean sel,boolean ex,boolean leaf, int row,boolean focus)(3)DirectoryChooser类DirectoryChooser实现了目录选取对话框的主体,它继承自javax.swing.JDialog类,并实现了接口ActionListener,TreeExpansionListener,其中最重要的组件是树形组件,它把文件系统所有目录以树形结构转化为节点显示出来,用户可以很方便的在树形组件中浏览到文件系统中的所有目
14、录。在DirectoryChooser中有几个方法是十分重要的,它们分别是:树选择事件:public void valueChanged(TreeSelectionEvent tse)树展开事件:public void treeExpanded(TreeExpansionEvent ee)初始化桌面:public void initDesk()为父节点添加子节点:public void addChild(DefaultMutableTreeNode node)这里重点指出显示对话框并获取用户选择的路径:程序为DirectoryChooser类定义了两个静态变量/判断用户是否点了“确定”按钮pu
15、blic static boolean CHOOSE_FLAG=false;/提取用户选取的路径public static String DIRECTORY_PATH=null;显示对话框时,界面的阻塞状态,等待用户的相关操作,当用户点击“取消”或者是对话框关闭按钮时,CHOOSE_FLAG的值设为false,除了对话框退出以外,不进行任何操作,反之当用户点击“确定”按钮时,设为true,DIRECTORY_PATH的值被设定为相应的路径值,实现语句如下:显示对话框:public boolean ShowDialog()setVisible(true);return CHOOSE_FLAG;调
16、用方法:DirectoryChooser dialog = new DirectoryChooser(frame,title);boolean f=dialog.ShowDialog();if(f) /获取选择路径System.out.println(DirectoryChooser.DIRECTORY_PATH);else ;/什么都不做3.2 重要图形界面模块的实现面向对象编程的最大好处就在于将一个大型的程序分成若干个模块来实现,而且模块之间的实现过程一般不会互相影响,哪个模块出了问题只需修改它本身,而不用改动其他模块。本程序也毫不例外的运用了面向对象编程的这种特点,下面将一一介绍本程序中
17、用到的程序模块。3.2.1 在线用户列表在线用户列表用于显示局域网内其他在线用户,它位于主面板的左侧,如图3-2所示:图3-2 在线用户列表构建在线用户列表用到了ponents包中的UserItem类、UserList类、MyRenderer类和neworker.panels包中的UserPane类。它们的实现方法分别为:UserItem类UserItem类是为构建在线用户列表而设计的类,用来存储在线用户信息(用户名,IP地址,用户头像地址),其构造函数为:public UserItem (String name,String ipaddress,String imagepath) /name
18、载入用户名,ipaddress,imagepathUserList类UserList类是用来存储在线用户对象的列表类,它继承自javax.swing.JList。在UserList还有很多对用户对象进行操作的方法:添加本地用户对象:public void addMe()添加用户:public void addUser(UserItem item)删除指定用户:public void removeUser(String username) 获取选中用户的用户名:public String getSelectedUserName() 获取所有在线用户的IP地址:public String getA
19、llIPs()删除所有用户对象: public void removeAllUser() 判断用户是否已在用户列表中:public boolean exists(UserItem item) MyRenderer类MyRenderer类重构了列表类的列表项,使更复杂的信息能在JList中显示,它继承自javax.swing.JPanel,并实现了javax.swing. ListCellRenderer接口,重写方法:public Component getListCellRendererComponent(JList list, Object o, int index, boolean is
20、Selected, boolean hasFocus)构建MyRenderer的意义是十分重大的,JList在默认情况下是不支持显示多行文本和图片的,只有通过构建一个类,也就是像MyRenderer这样的类,并让JList的对象调用方法:setCellRenderer(new MyRenderer()来实现。UserPane类UserPane类继承自javax.swing.JPanel类,是装载UserList的类,它的构造函数为: public UserPane(UserList list)3.2.2 文件发送区文件发送区用于存放即将发送的文件列表并发送文件和文件夹,它位于程序主面板的中上部
21、,其效果图如图3-3:图3-3 文件发送区文件发送区由networker.panels.filepane包实现,它包含LabelRenderer、FileIcon、FileTable、MScroll和FilePane五个类。在文件发送区,用户可以通过两种方式向文件发送区添加发送对象:1.通过菜单栏或右键菜单中“传送文件”、“传送文件夹”菜单项或通过工具栏中相应图标按钮打开文件或文件夹选择器;2.直接在windows资源管理器中将指定文件拖拽至文件发送区。filepane包主要围绕javax.swing.JTable表格类进行设计。LabelRenderer类LabelRenderer类继承了j
22、avax.swing.JLabel类,实现了javax.swing.table. TableCellRenderer接口,从而改写了JTabel表格的单元格,实现了带图标的单元格。重写方法:public Component getTableCellRendererComponent(JTable t,Object value, boolean isSelected,boolean hasFocus,int row,int col)FileIcon类FileIcon类封装了一个File类对象,并通过一系列方法获取该File对象的文件名、文件路径、文件图标。这里重点提出javax.swing.fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JAVA 飞鸽传书 系统 设计
链接地址:https://www.31ppt.com/p-2387429.html