1、聊天工具JAVA实验开发报告JAVA实验开发报告这个学期我们的高级程序设计语言的作业是设计一个聊天工具,本实验为高级语言程序设计课程的综合实验,要求学生综合应用网络编程技术、多线程技术和图形用户界面设计技术完成一个网络涂鸦应用程序的设计与开发。它的主要功能包括支持通过文本的方式进行聊天,支持在聊天的过程中插入表情和发送图片,以及保存文本聊天记录。支持基本的系统管理功能,包括:注册、登陆、离开、显示在线用户,以及在线隐身等状态管理。支持网络涂鸦功能,所有在线用户共享网络涂鸦区。每个用户都可以利用点、线、圆以及图片等方式进行自由绘图,利用橡皮擦擦除绘制的图形。由于涂鸦区共享,每个用户对于涂鸦区的改
2、动,都会传递到其他客户端。经过两个月的努力,不断的分析研究,终于完成的这个作业。虽然我的这个作业不是很完美,但是也算完成了实验要求。 对于这个实验,我首先按照QQ聊天工具的形式,编译了四个用户图形界面,它们分别是用户聊天界面,用户登陆界面,用户注册界面和后来没有用上的用户好友界面。然后对涂鸦板进行了编译。涂鸦板主要用到的是鼠标监听技术,可以画矩形,椭圆,直线,可以当铅笔以及橡皮。然后使用了网络编程技术编译了聊天功能和共享涂鸦。在聊天和共享涂鸦的过程中,我使用了多线程和数据库技术,这使的用户进行聊天和共享涂鸦时可以顺利的接收与发送以及登陆与注册。我的实验成果的具体功能如下:(一)服务器(用户聊天
3、界面) 在用户聊天界面里,点击开启服务按钮,服务器分别在两个端口等待着用户登陆和注册。当用户登陆时,输入自己的账号与密码后当点击登陆按钮,将与服务器建立连接,此时,服务器去调用数据库,如果用户登陆的账号与密码符合,则登陆成功,并出现一个用户界面。显示用户登陆成功。并将用户加到一个链表中。在用户登陆时,可以选择自己的登陆状态,有我在线上和隐身两种状态。如果你不是隐身登陆,该用户的昵称还将加到好友列表里去。每当一个新的用户上线,服务器都将好友列表发送给所有的链表里的用户。那样每个用户都可以知道当前在线的好友,从而可以选择自己想要聊天和共享涂鸦的好友进行交流。下面是用户成功登陆后返回的用户聊天界面,
4、并提醒该用户登陆成功: (用户登陆成功后界面)如果你输入的账号和密码不符合,在服务器调用数据库后返回错误信息,此时在登陆的表面出现一个插件,提醒你输入有误,请你重新输入你的账号与密码。如下所示:(登陆错误时的窗口)(二)(用户登陆)用户登陆界面供用户登陆,你可以选择你的登陆状态,有隐身和我在线上两种状态,当选择我在线上时在好友列表里可以看见你,如果是隐身,在好友列表里将看不到你。但是在链表里你仍加了进去,这上面已经有过说明。(三)(用户注册)用户注册界面供用户注册账号和密码以及自己的昵称,在你输入你自己想要的账号、密码和昵称后点击确定时,与服务器建立连接,此时服务器去调用数据库。如果账号已经存
5、在,则返回账号已经存在,请重新输入。否则返回恭喜你,注册成功。此时你所申请的账号和密码以及昵称都被存入到数据库里。下次你登陆时就可以使用这个帐号和密码了。 (四)(用户端)在一个用户成功登陆后将出现对应用户的聊天窗口。在每个用户的聊天窗口中,左边是用于聊天,你可以在好友列表中选择一个好友与对方进行聊天。在每个的用户聊天界面里有一个好友列表,如下图中区域所示。你也可以群聊,只要你在好友列表里选择上(大家(所有人可见)。在聊天的过程中,你的所有聊天信息都将被储存在聊天记录里。具体说明在下面将介绍。在用户聊天界面的右边区域是一个涂鸦区域。用户可以通过拖动鼠标进行画图。此涂鸦板可以画矩形,直线,椭圆,
6、以及铅笔。并可以换颜色,清除,和用橡皮对图形进行擦拭。在橡皮的实现功能里,主要操作和铅笔差不多,只是将铅笔的颜色换成与画布的颜色相同。但是我发现了一个问题,在使用橡皮后,在橡皮擦拭后的地方都将无法在进行画图。点击颜色按钮将出现一个插件,插件的代码很简单:JColorChooser a=new JColorChooser();Color c=a.showDialog(this, , Color.BLACK);可以供你选择颜色,你也可以自己配你自己想要的颜色。颜色的选择界面如下:我花了一个星期的时间实现了涂鸦板的共享。当你在好友列表中选择一个发送对象时,当你拖动鼠标在自己的涂鸦板上画图时,每松开鼠
7、标,在对方的涂鸦板上也可以看到你所画的图形。这个动作放在鼠标的RELEASED方法里面就可以了。下面是我用涂鸦板里所有的画图功能所画的“北京欢迎你”的字样,并将这个涂鸦界面与用户12进行了共享。如下所示:这是发送方的窗口。在好友列表中选择要发送的对象,然后就可以共享涂鸦了。在共享涂鸦里,通过传坐标的方法在对方的涂鸦板里把对应的图形画出来,这样就实现了图形共享。在传颜色的时候,通过传红绿蓝的值把颜色传过去。这时在对方的涂鸦板上把颜色又重新画出来,这样就实现了涂鸦板的共享。我认为在用户互相聊天和共享涂鸦的时候的难点就是如何彼此传参数。这是曾经困惑我很长时间的问题。经过长时间的努力,后来我使用了一个
8、单独的线程来为用户接收所有的信息。通过服务器的中介作用实现了用户与用户之间的聊天与共享涂鸦。这是被发送的窗口。(五)(聊天记录) 在用户聊天时,我通过一个本地的文本文档把所有的聊天记录都记录下来。当点击聊天记录按钮时,就可以显示聊天记录文本。你就可以看到所有的聊天记录了。 回想一下,这个实验用到了输入输出流,通过输入输出流可以进行各个用户的互相聊天,也可以进行群聊,只要在好友列表中选择(大家(所有人可见)即可。服务器也可以对所有的用户发送系统信息。用到了多线程,通过多线程的使用,使的用户在接受信息和发送信息彼此独立,使得共享涂鸦和聊天都可以顺利的进行。多线程的使用方法就是把一个动作放在一个RU
9、N方法里,这样就形成了一个单独的线程,就不会彼此影响。另外就是对数据库的使用,对数据库的使用其实很简单,只需几行代码就可以对数据库进行调用。代码如下:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con=DriverManager.getConnection(jdbc:odbc:cafeicat);Statement rs=con.createStatement();ResultSet rsl=rs.executeQuery(SELECT*FROM information);然后在控制面板里建立一个数据源就可以对数据库进行使用了。
10、以下我将给出部分服务器里的代码,如下所示:public void startService() try serverSocket = new ServerSocket(8000); thetext1.append(服务端已经启动,分别在8000和9000端口侦听.随时准备接受用户上线请求n); catch (Exception e) userNodeList=new UserNodeList(); manager = new ServerManager(serverSocket,chooseReceiver,panel, thetext1,userNodeList); manager.star
11、t();/经理开始工作,随时等待用户上线请求 zhuce=new ZhuceDemo(); zhuce.start(); public void stopService() try sendStopToAllUsers(); /manager.isStop = true; serverSocket.close(); int count = userNodeList.getNumberOfUser(); int i =0; while( i count) UserNode user = userNodeList.findUser(i); user.userInput .close(); user
12、.userOutput.close(); user.userSocket.close(); i+; thetext1.append(服务器已经关闭!n); chooseReceiver.removeAllItems(); chooseReceiver.addItem(大家(所有人可见); catch(Exception e) public void sendStopToAllUsers() int count = userNodeList.getNumberOfUser(); int i = 0; while(i count) UserNode user = userNodeList.findUser(i); if(user = null) i +; continue; try user.userOutput.writeObject(服务关闭); user.userOutput.flush(); catch (Exception e) i+; 这是服务器里开启服务和关闭服务的代码。(用户好友界面没用上) 这个用户好友界面本来准备用来加好友的,可是后来没有用上。实验结束后,我掌握了很多知识,我理解了多线程,更加深入的认识了输入输出流,并知道了数据库的使用。在此,我谢谢所有的老师。 杨海春(20071301155) 四班
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1