企业内部通信系统的设计与实现 计算机论文.doc

上传人:小小飞 文档编号:3908823 上传时间:2019-10-10 格式:DOC 页数:34 大小:964.52KB
返回 下载 相关 举报
企业内部通信系统的设计与实现 计算机论文.doc_第1页
第1页 / 共34页
企业内部通信系统的设计与实现 计算机论文.doc_第2页
第2页 / 共34页
企业内部通信系统的设计与实现 计算机论文.doc_第3页
第3页 / 共34页
企业内部通信系统的设计与实现 计算机论文.doc_第4页
第4页 / 共34页
企业内部通信系统的设计与实现 计算机论文.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《企业内部通信系统的设计与实现 计算机论文.doc》由会员分享,可在线阅读,更多相关《企业内部通信系统的设计与实现 计算机论文.doc(34页珍藏版)》请在三一文库上搜索。

1、 本科毕业设计(论文)题 目: 企业内部通信系统的设计与实现 院 系: 计算机科学系 专 业: 计算机科学与技术 姓 名: 学 号: 指导教师: 教师职称: 填写日期: 2012年5月7日贵阳学院毕业设计(论文)摘 要随着企业的不断增多,社会经济的飞速发展,越来越多的企业开始使用内部通信软件来解决人员的工作沟通问题,它成本低,通信速度快,不仅方便人员的技术交流,还解决了电话的单线程通讯和费用高昂等问题。企业内部通信软件可以很好的解决企业内部通信问题,使每个员工都能及时的了解自己的工作内容和获取需要的资料,加强了团队的沟通。此系统基于UDP/IP协议,采用Java语言设计和实现,使用Eclips

2、e和WindowBuilder Pro插件进行开发。系统实现了信息通信、系统设置、搜索用户、访问公共资源、互访对方主机五大功能。本系统结构清晰、界面友好、操作简单、通用性强,可以大大提高了企业的工作效率。关键词:企业;信息通信;Java;UDP/IPAbstractWith the incresing of the enterprises ,and the rapid economic development of society, more and more of the enterprises are starting to use internal communications soft

3、ware solving communication problem of staff. It is low cost, high speed communications ,not only facilitate the technology transfer but also solve the single-threaded calls communication and costly problems.Enterprise instant messaging software can solve internal communication problems, so that ever

4、y employee is able to understand their work content and access to required information enhance communication between the team. This system based on UDP/IP,uses the Java language design and implementation, use Eclipse and WindowBuilder Pro plugin development. This system realizes five functions inclu

5、ding the information communication, system settings, search users, visit the public resources and other host visits,This system structure is clear, friendly interface ,easy to operate. strong universability, it could be greatly improve the efficiency of enterprises.Keywords:Enterprise ;Information c

6、ommunication ;Java;UDP/IP目 录摘 要IAbstractII第一章 前言1第二章 概述2第一节 开发背景2第二节 课题现状2第三节 软硬件需求2第三章 系统分析3第一节 需求功能分析3第二节 可行性分析3一、可行性要求、目标3二、技术可行性分析3三、经济可行性分析4第四章 系统设计5第一节 系统目标5第二节 系统功能5第三节 数据库结构设计5一、数据库分析5二、企业内部通信系统的E-R图6三、数据库结构设计7第五章 详细设计和代码实现8第一节 主窗体模块的设计与实现8一、界面设计8二、实现过程8第二节 公共模块的设计与实现10一、界面设计10二、实现过程11第三节 系统

7、托盘模块的设计与实现13一、界面设计13二、实现过程13第四节 系统工具模块的设计与实现14一、界面设计14二、实现过程15第五节 用户管理模块的设计与实现17一、界面设计17二、实现过程18第六节 通信模块的设计与实现20一、界面设计20二、实现过程23第六章 总结27致谢28参考文献2928第一章 前言从20世纪90年代开始,公共的即时消息和实时通信逐渐成为了人们重要的沟通工具, 如MAIL、QQ、MSN等。但是,公共的即时信息给人们带来方便的同时,也带来了极大的安全隐患,当今网络,木马程序、病毒和其他恶意软件横行,稍不注意,电脑就会中毒。对于企业,使用公共的即时消息是一种安全威胁,企业的

8、IT部门对于公共即时消息的使用计划无法控制。公共的即时通信,正成为病毒和其他恶意软件入侵企业计算机的一个渠道,这意味着最终用户能够把敏感的数据外传。为此企业内部通信工具应运而生,本工具从源头上解决了这一隐患,专为企业而设计,通信服务器就直接置于企业内部,所有信息由企业自己管理,让企业以更安全、更可伸缩和更易于管理的方式灵活方便地使用协同和通信服务的功能。企业内部通信工具可以很好的解决企业通信问题,面对工作目标和团队工作中可能出现的问题,必须加强团队的沟通,使每个员工都能及时地了解自己的工作内容和获取需要的资料。为解决这一问题,开发一个界面友好、易于操作的内部通信软件成为企业的首选。本系统应用了

9、JDK 6.0新增的系统托盘技术和JavaDB数据库。系统托盘可以在程序主窗体最小化之后,使用托盘控制窗体的相应操作,例如打开主窗体;JavaDB使用灵活,可以应用到不同的系统平台中,只要该平台有支持Java的环境。整个系统从操作简便、界面友好、灵活、实用、安全的要求出发,实现信息通信、系统设置、搜索用户、访问公共资源、互访对方主机等功能。第二章 概述第一节 开发背景近几年,随着网络的迅速发展和全球信息化速度的加快,网络通信已经不算是新鲜事物了,但大多数网络通信需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如遭遇到网络攻击、病毒入侵等等。由于互联网上的网

10、络通信工具有时会给企业内部信息交流带来不便,所以为了方便企业内部用户之间的沟通、保证企业内部局域网的安全,需要开发一个基于局域网的信息收发系统的即时通信工具。第二节 课题现状企业内部通信系统是基于局域网的即时通信工具,可以说是一个internet通信工具的小规模版本,一般采用UDP或者TCP协议体系等来实现,开发技术已经比较成熟,国外的通信工具较有名的有ICQ、MSN Messenger、国产的QQ、新浪UC都实现了广域网的即时通信。在最近几年,国内的局域网通信工具较有代表性有飞鸽传书、飞秋,这两款软件的快速、实效、迷你、简单的特点受到了广大企业的好评。这些工具的实现方式具体细节不易得之,但它

11、无非是利用各种平台上的网络通信接口,基于TCP/IP或者UDP/IP协议架构下的软件产品。对于一个企业内网,这些功能的实现相比于广域网更加简单。所以还是有很大研究价值的1。第三节 软硬件需求本系统运行时需要以下条件。硬件平台:CPU:Pentium4 1.8GHz内存:128MB以上硬盘空间:100MB软件平台:操作系统:Windows 2000、Windows XP、Windows 2003等开发工具:Eclipse、JDK6.0数据库:JavaDB第三章 系统分析第一节 需求功能分析本系统的设计目标是实现一个企业内部局域网通信系统,企业内部职工可以方便的进行交流,可以大大的提高职工的工作效

12、率。根据企业对局域网通信的需求,本系统主要包括信息通信、系统设置、搜索用户、访问公共资源、访问对方主机五大功能。各功能概述:信息通信:信息通信是企业内部通信系统的核心功能,它用于不同职工之间的通信,这种通信方式能够实现多个职工之间的通信,而不存在类似电话占线的问题,增加了任务分配的新方式,从而提高企业的工作效率。系统设置:系统设置用于设置用户界面、公共路径、公告栏等的功能。用户搜索:用户搜索用于搜索企业局域网内的其他用户,系统会根据用户所设置的IP搜索范围搜索所有计算机上的用户。访问公共资源:访问公共资源用于实现企业内部公共服务器上资源访问的功能。访问对方主机:访问对方主机用于两人聊天情况下对

13、对方主机的访问和控制的功能。第二节 可行性分析一、可行性要求、目标企业内部通信系统必须提供网络通信功能,在通信过程中禁止使用聊天表情、文件传送等功能,避免资料外泄,或因发送错误而导致上机资料的丢失以及其他损失。最重要的是必须适应任何操作系统,也就是实现跨平台技术,因为企业内部的工作需要,工作环境中使用了多个操作系统来完成不同的工作。另外,系统不需要使用服务器中转和记录通信内容,可以独立完成通信任务,排除职工对领导监视工作进度等行为的逆反心理。企业内部通信系统的目标是实现企业的信息化通信,提高企业通信能力,提高任务理解和执行能力,减少没有必要的人员流动和资金损耗,以最快的速度提升企业的市场竞争力

14、。二、技术可行性分析局域网通信系统的技术已经非常成熟,首先,从硬件上讲,计算机硬件速度现在已经不是问题,高速便捷的网络已经十分普遍,这些为本系统的运行打下坚实的基础。从软件的角度上讲,数据库技术已经相当成熟(目前用得比较多的有SQL Server, JavaDB等),并且处理能力也非常强,这为海量数据的存储和处理打下了坚实的基础,同时,使用java开发图形界面程序也相当普遍。有了这些技术的支持,我们成功开发一个局域网通信系统没有任何技术风险。三、经济可行性分析经济可行性主要是对项目的经济效益进行评价。本系统开发完成后可缩减工作时间,提高工作效率,而且简单易操作,不需对使用人员进行培训,不管是在

15、资金上还是效率上都能达到预期的效果。本系统开发经费对于企业在经济上是可以接受的,并且本系统实施后可以显著提高工作效率,有助于企业的信息化管理,所以该企业内部通信系统在经济上是可行的。第四章 系统设计第一节 系统目标系统根据企业对内部通信系统的要求,本系统可以实现以下目标:1.操作简单、界面简洁美观。2.更方便访问企业公共资源。3.及时显示企业公共信息。4.在通信窗口显示对方IP信息。5.局域网内网用户自动搜索。6.系统运行稳定、安全可靠。 第二节 系统功能系统功能结构图如下:企业内部通信系统信息通信系统设置用户搜索访问公共资源访问对方主机图4.1系统功能结构图第三节 数据库结构设计一、数据库分

16、析该系统是一个桌面应用程序,它不像web应用那样需要配置到指定的服务器上,所以数据库和该系统应存在于同一计算机中,这样,不仅节省了开销,而且还提高了系统的安全性。该系统所用数据库为JAVADB数据库。由于该数据库的运行环境平台要求较低,一般的电脑都可以满足它的硬件条件2。二、企业内部通信系统的E-R图该系统的实体包括用户和窗口位置两个实体,分别记录着通信窗口的绝对位置和用户的信息。 (1)用户实体用户实体主要包括IP信息、PC名称、用户信息、系统信息等,它记录了搜索到的用户和所有的用户信息。用户实体的E-R图如下所示:用户实体头 像提示文本用户信息IP地 址主机名称 图4.2用户实体E-R图

17、(2)窗口位置实体窗口位置实体记录着窗体最后的移动位置和窗体大小等信息,主要包括窗体位置的横坐标和竖坐标(下图用X、Y轴坐标表示)、窗体的高度和宽度。窗口实体的E-R图如下所示:X坐标窗口实体Y坐标窗体高度窗体宽度图4.3窗口实体E-R图三、数据库结构设计在该系统中的数据库db_EQ包含两个数据表,分别为用户信息表tb_users和窗体位置信息表tb_location。(1)tb_users(用户信息表)用户信息表用来保存企业内的通信用户,表tb_users如下所示:表4.1用户信息表tb_users字段名数据类型是否为空是否主键默认值描述iPVarchar(16)NOYES用户IPhostV

18、archar(30)YESNONULL主机名称nameVarchar(20)YESNONULL姓名tooltipVarchar(50)YESNONULL提示文本iconVarchar(50)YESNONULL头像图标(2)tb_location(窗体位置信息表)窗体位置表用来保存窗体的位置和大小,表tb_location如下所示:表4.2 窗体位置信息表tb_location字段名数据类型是否为空是否主键默认值描述xLocationIntYESNONULLX轴坐标yLocationIntYESNONULLY轴坐标heightIntYESNONULL窗体高度widthIntYESNONULL窗体

19、宽度第五章 详细设计和代码实现第一节 主窗体模块的设计与实现一、界面设计主窗体界面是本系统的用户列表,它由用户列表、系统选项卡、公告提示等组成。其中系统选项卡用于切换不同的管理界面,包括系统设计和系统工具界面3。主窗体的效果图如下所示:图5.1 主窗体界面示意图二、实现过程主窗体实现部分包括创建主窗体和记录窗体位置。其中创建主窗体的步骤如下:(1)创建JXCFrame类,在类中创建窗体的对象,为窗体添加选项卡面板,并添加用户列表、系统工具、系统设置3个选项卡和状态栏标签、公告按钮等属性。在构造方法中初始化窗体上的控件。数据库操作类、首选项对象等属性,为窗体添加时间监听器、为公告信息按钮添加监听

20、器等。(2)初始化Socket服务器,指定端口为1111,如初始化失败,则提示服务器端口被占用或本软件已运行,并退出本系统。用于接收其他用户发送的通信信息。关键代码如下:try / 启动通讯服务端口ss = new DatagramSocket(1111); catch (SocketException e2) if (e2.getMessage().startsWith(Address already in use)showMessageDialog(服务端口被占用,或者本软件已经运行。);System.exit(0);(3) checkPlacard方法,用于检测系统公告,当公告路径中存在

21、系统公告时,将从文件中获取完整信息,调用pushMessage()方法将信息压入公告信息栈中。关键代码如下:private void checkpacard() / 检测公告信息方法String placardDir = preferences.get(placardPath, null);if (placardDir = null) pushMessage(未设置公告路径);return;File placard = new File(placardDir);try if (placard.exists() & placard.isFile() StringBuilder placardSt

22、r = new StringBuilder();Scanner sc = new Scanner(new FileInputStream(placard);while (sc.hasNextLine() placardStr.append(sc.nextLine();pushMessage(placardStr.toString(); catch (FileNotFoundException e) pushMessage(公告路径错误,或公告文件不存在);(4)initUserInfoButton()方法用于初始化本地用户信息,并在主窗体左上角显示本地用户的头像和名称,会在用户更改本地用户名称

23、时同步更新。(5) main()方法,本方法首先获取用户设置的界面外观,然后调用UIManager类设置指定的外观,生成主窗体对象。最后初始化服务器端口和系统栏图标。关键代码如下:public static void main(String args) try String laf = preferences.get(lookAndFeel, java默认);/获取用户选择的外观if (laf.indexOf(当前系统)-1)UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/设置外观EQ frame = ne

24、w EQ();frame.setVisible(true);/显示窗体frame.SystemTrayInitial();/ 初始化系统栏frame.server();/启动服务端口frame.checkPlacard();/检测系统公告 catch (Exception e) e.printStackTrace(); 记录窗体的位置步骤如下:(1)为窗体添加监听器,当改变窗体的位置和大小时,将调用saveLocation()方法将窗体和位置大小保存到数据库中。(2)saveLocation(),该方法中调用了DAO类中的updateLocation将窗体的位置和大小保存到数据库中。第二节 公

25、共模块的设计与实现一、界面设计在本系统的项目空间中,有部分模块是公用的,或者多个模块甚至整个系统的配置信息是被多个模块重复调用完成业务的逻辑。其中有关数据库的操作、连接数据库、创建本机IP的默认用户(并添加到数据库中)、从数据库中获取窗体位置和大小、添加或删除指定用户、更新用户信息等4。二、实现过程公共模块包括数据库操作类和系统工具类。其中DAO类主要负责有关数据库的操作,该类在构造方法中驱动并连接数据库,然后将构造方法设置为private私有属性,通过静态的getdao()获取DAO类的实例对象,这是简单的单例模式。在连接数据库时,可以指定create参数为true直接创建数据库,但在此之前

26、需要调用dbExist()方法判断数据库是否存在。Dao类的关键代码如下:public class Dao / 数据库驱动private static final String driver = org.apache.derby.jdbc.EmbeddedDriver;private static String url = jdbc:derby:db_EQ;/ 数据库URLprivate static Connection conn = null;/ 数据库连接private static Dao dao = null;private Dao() try Class.forName(drive

27、r);if (!dbExists() conn = DriverManager.getConnection(url + ;create=true);createTable(); elseconn = DriverManager.getConnection(url);addDefUser(); catch (Exception e) e.printStackTrace();JOptionPane.showMessageDialog(null, 数据库连接异常,或者本软件已经运行。);System.exit(0);private boolean dbExists() / 测试数据库是否存在bool

28、ean bExists = false;File dbFileDir = new File(db_EQ);if (dbFileDir.exists() bExists = true;return bExists;public static Dao getDao() / 获取DAO实例if (dao = null)dao = new Dao();return dao;public List getUsers() / 获取所有用户List users = new ArrayList();try String sql = select * from tb_users;Statement stm =

29、conn.createStatement();ResultSet rs = stm.executeQuery(sql);while (rs.next() User user = new User();user.setIp(rs.getString(1);user.setHost(rs.getString(2);user.setName(rs.getString(3);user.setTipText(rs.getString(4);user.setIcon(rs.getString(5);users.add(user);rs.close(); catch (SQLException e) e.p

30、rintStackTrace();return users;Resource类是企业内部通信系统中的工具类,该类中的方法都是静态的,可以直接调用,而不用创建Resource类的实例对象。这些工具方法包括搜索用户的方法、登录公共资源的方法、信使群发的方法和单条信息发送的方法。第三节 系统托盘模块的设计与实现一、界面设计系统托盘模块用于定义系统栏图标。本系统的主窗体是继承对话框窗体编写的,该窗体在系统任务栏不会显示任务标题,如果主窗体最小化之后将会隐藏,这时必须使用快捷键或者系统托盘中的图标执行显示窗体的命令。系统托盘包含相应的菜单,右键点击会弹出选择菜单,菜单包括三个选项,分别是:“访问服务器”

31、、“打开”、“退出”。系统托盘的设计效果图如下所示: 图5.2系统托盘示意图二、实现过程在JDK6.0中,AWT新增加了SystemTray类和TrayIcon类,它们可以在系统托盘区创建一个托盘程序。SystemTray类表示桌面右下角的系统托盘,系统托盘由运行在桌面上的所有应用程序共享,可以使用getSystemTray()方法获取系统托盘对象,该方法总是对每个应用程序返回相同的实例。并不是所有的操作系统都支持系统托盘,如果当前系统不支持托盘的话,该方法将自动抛出异常。为避免程序出现错误,在获取系统托盘实例之前,需要检查系统托盘是否支持。可以调用isSupport()来实现5。System

32、tray类可以包含一个或多个TrayIcon类的实例,即系统栏图标,可以使用add()将它们添加到托盘,TrayIcon对象由图像、弹出菜单和一组相关监听器组成。创建系统托盘的关键代码如下:try String title = EQ通讯软件;/系统栏提示文本的标题String company = 贵州省XXX科技有限公司;/系统栏提示文本SystemTray sysTray = SystemTray.getSystemTray();/获取系统托盘对象Image image = Toolkit.getDefaultToolkit().getImage(EQ.class.getResource(/

33、icons/sysTray.png);/ 系统栏图标trayicon = new TrayIcon(image, title + n + company, createMenu(); /创建系统栏图标对象trayicon.setImageAutoSize(true);/设置自动大小trayicon.addActionListener(new SysTrayActionListener();/添加监听器sysTray.add(trayicon);/添加系统栏图标到系统托盘trayicon.displayMessage(title, company, MessageType.INFO); catc

34、h (Exception e) e.printStackTrace();第四节 系统工具模块的设计与实现一、界面设计本系统的工具模块起到维护系统的作用,包括更换程序外观、。设置IP范围、用户搜索和系统更新、设置系统公告路径、设置公共程序路径、系统登录等功能。在该系统第一次运行的时,用户搜索功能可以搜索内部网络中所有正在运行的计算机。本系统工具模块中使用了Java的LookAndFeel外观技术,不同的外观中控件的外观也会不同,就比如我们常用的电脑中,windows经典样式和windowsXP样式外观的按钮、列表、菜单、工具栏甚至窗体的外观都不相同。在本系统中提供了“当前系统”和“JAVA默认值

35、”两个外观选项,其中“JAVA默认值”是Swing默认的外观,不需要特别设置,而“当前系统”外观需要使用相应的方法获取当前系统的外观名称,然后将该外观应用于默认的外观6。系统工具的设计效果图如下所示:图5.3系统工具界面示意图二、实现过程(1)createSysToolPanel()方法,用于创建系统工具选项卡,在该选项卡中包括界面选择、用户搜索和系统操作3部分,其中系统操作用于程序更新,它们都被添加到系统工具面板中,createSysToolPanel()方法必须设置好面板的布局和初始化工作。关键代码如下:private JScrollPane createUserList() / 用户列表

36、面板JScrollPane scrollPane = new JScrollPane(); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);addUserPopup(chatTree, getPopupMenu();/ 为用户添加弹出菜单scrollPane.setViewportView(chatTree);scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0);chatTree.addMouseListener(new C

37、hatTreeMouseListener();return scrollPane;(2)在createSysToolPanel()方法中创建界面选择部分,该部分以列表控件显示了两种外观选择,当用户选择其中以种外观并单击“确定”按钮之后,选择外观会保存到首选项中,然后提示重新运行本软件。(3)在createSysToolPanel()方法中创建用户搜索部分,包括搜索列表、搜索进度条和“搜索新用户”3个控件,当单击“搜索新用户”按钮时,系统会根据用户在系统设置界面所设置的IP搜索范围搜索所有计算机信息,并创建相应的用户对象,然后保存到数据库中。(4)创建“搜索新用户”按钮的事件监听器SearchU

38、serActionListener类,调用Resource工具类的searchUsers()方法搜索指定IP范围内的所有用户。系统工具类中的searchUsers()方法,该方法用于搜索局域网内的通信用户,也就是搜索企业内的所有职工。本方法将获取用户指定的IP范围,并在该范围内搜索所有可以访问的计算机,如果用户没有指定IP范围,系统默认的是192.168.0.1-192.168.0.255。关键代码如下:try for (int l = ipsInt0; l = ipeInt0; l+) boolean b0 = l ipeInt0; / 记录第一层循环的条件int k = l != ipsI

39、nt0 ? 0 : ipsInt1; / 从第二次循环以后k赋值0for (; b0 ? k 256 : k = ipeInt1; k+) boolean b1 = b0 | k ipeInt1; / 记录第二层循环的条件int j = k != ipsInt1 ? 0 : ipsInt2; / 从第二次循环以后j赋值0for (; b1 ? j 256 : j = ipeInt2; j+) boolean b2 = b1 | b1 ? j 256 : j ipeInt2;int i = j != ipsInt2 ? 0 : ipsInt3;for (; b2 ? i 256 : i = ip

40、eInt3; i+) if(!button.isSelected()progressBar.setIndeterminate(false);return;Thread.sleep(100);/线程休息100毫秒String ip = l + . + k + . + j + . + i;progressBar.setString(正在搜索: + ip);/取消进度条的滚动if (tree.addUser(ip, search)/添加新用户model.addElement(添加+ ip + );catch(Exception e) e.printStackTrace();第五节 用户管理模块的设计

41、与实现一、界面设计用户管理模块类似于聊天软件的好友列表,其中包含所有用户信息,另外在用户名称上单击鼠标右键,会弹出相应的管理菜单,在该菜单中包含“添加用户”、“更名”、“删除用户”、“信使群发(在没有多选用户的情况下无法进行信使群发)”、“访问主机资源”和“访问公共程序”,其中“访问主机资源”是访问该用户的共享文件夹7。界面设计的效果图如下所示:图5.4用户管理界面示意图二、实现过程(1)创建UserTreeRanderer类,该类继承Jpanel类成为一个面板控件,同时该类也实现了TreeCellRenderer接口成为树节点的渲染器。该类的构造方法接受3个图标参数,分别用于树节点的打开、关

42、闭和叶节点的图标。(2)在UserTreeRanderer类中的getTreeCellRendererComponent()方法,渲染树节点的界面样式。本方法获取主窗体的宽度,并使用该宽度设置节点的宽度,是节点与窗体同宽度,当选择某个节点时,该方法将使用指定颜色绘制节点的边框,以突出该节点被选择的效果。(3)创建ChatTree类,该类继承Jtree自定义的树控件,并且使用了之前定义的UserTreeRanderer树节点渲染器, sortUsers()方法,此方法是一个内部线程,该线程获取本地的IP地址,使用该地址从数据库中获取本地用户对象,并将本地用户设置在用户列表首位。然后从数据库中获取其它用户对象。使第一个用户处于被选择状态,并更新状态栏的用户人数。关键代码如下:private synchronized void sortUsers() /排序用户列表new Thread(new Runnable() public void run() try Thread.sleep(100);root.removeAllChildren();String ip = InetAddress.getLocalHost().getHostAddress(); /获取本地IPUser localUser = dao.g

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1