收藏 分享(赏)

Java程序设计11142.doc

上传人:dreamzhangning 文档编号:2728189 上传时间:2018-09-26 格式:DOC 页数:18 大小:97KB
下载 相关 举报
Java程序设计11142.doc_第1页
第1页 / 共18页
Java程序设计11142.doc_第2页
第2页 / 共18页
Java程序设计11142.doc_第3页
第3页 / 共18页
Java程序设计11142.doc_第4页
第4页 / 共18页
Java程序设计11142.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、中国地质大学(北京)Java 程序设计实习报告题 目:局域网聊天程序设计班 号:10040912学 号:1004091228姓 名:周颖颖任课教师:赵敏 刘尚一 巨枫 中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日一 程序设计要求1.查找在线用户的功能(类似于飞鸽软件,点击刷新显示局域网中在线用户,此处可以使用 UDP 组播技术)2.发送接收消息的功能(找到在线用户后,双击可以与之聊天,类似于飞鸽或 QQ)3.发送接收文件的功能(类似于飞鸽或 Q

2、Q)4.截图功能,并且可发送截图给对方显示。 (可直接使用之前的截图软件)二 程序设计说明程序设计一共用了 8 个类。分别是:ChatMain 类、MessageStyle 类(信息设计格式) 、ReceiveMulticasMessage 类(接收广播的群聊消息并显示到群聊界面) 、ReceiveUseStatus 类(接收广播的在线信息,并调用 UserStatus 更新在线用户) 、SendMessage 类(发送消息,包括发送单聊消息和广播群聊消息) 、SendUserStatus 类(广播上线消息) 、User 类(用户数据结构,代表在线用户信息) 、UserStatus 类(用户状

3、态的信息) 。三 程序代码(1).ChatMainlei 类import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.EventQueue;import .InetAddress;import .UnknownHostException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import javax.swing.DefaultListModel;import javax.swing.JButto

4、n;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日import javax.swing.JSplitPane;impor

5、t javax.swing.border.EmptyBorder;import javax.swing.JTextPane;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JMenuBar;import javax.swing.JMenu;import javax.swing.JMenuItem;import java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.awt.Inse

6、ts;import java.awt.Color;public class ChatMain extends JFrame private JPanel contentPane;private JTextPane inputTextPane;private JTextPane showTextPane;private JList list;private JLabel statisticsLabel;public static String username;public HashMap chatDialogHashMap;public HashMap getChatDialogHashMap

7、()return chatDialogHashMap;public void setChatDialogHashMap(HashMap chatDialogHashMap)this.chatDialogHashMap = chatDialogHashMap;public JTextPane getShowTextPane()return showTextPane;public void setShowTextPane(JTextPane showTextPane)this.showTextPane = showTextPane;/* Launch the application.中国地质大学(

8、北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日*/public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try ChatMain frame = new ChatMain();frame.setVisible(true);frame.setVisible(true);(new ReceiveUserStatus(frame).st

9、art();(new SendUserStatus(“hi“).start();(new ReceiveMulticastMessage(frame).start(); catch (Exception e) e.printStackTrace(););/* Create the frame.*/public ChatMain() setTitle(“u5C40u57DFu7F51u804Au5929“);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 635, 484);JMenuBar menuBar =

10、 new JMenuBar();menuBar.setForeground(Color.BLUE);menuBar.setBackground(Color.WHITE);setJMenuBar(menuBar);JMenu menu = new JMenu(“u8BBEu7F6E“);menuBar.add(menu);JMenuItem menuItem = new JMenuItem(“u66F4u6539u7528u6237u540D“);menuItem.addActionListener(new ActionListener() public void actionPerformed

11、(ActionEvent e)ChatMain.username = JOptionPane.showInputDialog(“请输入用户名:“);(new SendUserStatus(“hello“).start();中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日);menu.add(menuItem);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5,

12、 5, 5);contentPane.setLayout(new BorderLayout(0, 0);setContentPane(contentPane);JSplitPane splitPane = new JSplitPane();contentPane.add(splitPane, BorderLayout.CENTER);JPanel panel = new JPanel();splitPane.setLeftComponent(panel);GridBagLayout gbl_panel = new GridBagLayout();gbl_panel.columnWidths =

13、 new int149, 0;gbl_panel.rowHeights = new int33, 380, 0;gbl_panel.columnWeights = new double0.0, Double.MIN_VALUE;gbl_panel.rowWeights = new double0.0, 0.0, Double.MIN_VALUE;panel.setLayout(gbl_panel);JPanel panel_1 = new JPanel();GridBagConstraints gbc_panel_1 = new GridBagConstraints();gbc_panel_1

14、.anchor = GridBagConstraints.NORTH;gbc_panel_1.fill = GridBagConstraints.HORIZONTAL;gbc_panel_1.insets = new Insets(0, 0, 5, 0);gbc_panel_1.gridx = 0;gbc_panel_1.gridy = 0;panel.add(panel_1, gbc_panel_1);JButton button = new JButton(“u5237u65B0“);button.addActionListener(new ActionListener() public

15、void actionPerformed(ActionEvent e) (new SendUserStatus(“hi“).start(););panel_1.add(button);JScrollPane jScrollPane = new JScrollPane();GridBagConstraints gbc_jScrollPane = new GridBagConstraints();gbc_jScrollPane.fill = GridBagConstraints.BOTH;gbc_jScrollPane.gridx = 0;gbc_jScrollPane.gridy = 1;pan

16、el.add(jScrollPane, gbc_jScrollPane);statisticsLabel = new JLabel(“u5728u7EBFu7528u6237uFF080uFF09“);中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日jScrollPane.setColumnHeaderView(statisticsLabel);JPanel panel_2 = new JPanel();splitPane.setRightComp

17、onent(panel_2);panel_2.setLayout(new BorderLayout(0, 0);JPanel panel_3 = new JPanel();panel_2.add(panel_3, BorderLayout.SOUTH);JButton button_1 = new JButton(“u53D1u9001“);button_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(!inputTextPane.getText().equals(“)

18、(new SendMessage(inputTextPane, showTextPane, “224.0.0.1“).start(););panel_3.add(button_1);JSplitPane splitPane_1 = new JSplitPane();splitPane_1.setOrientation(JSplitPane.VERTICAL_SPLIT);panel_2.add(splitPane_1, BorderLayout.CENTER);showTextPane = new JTextPane();showTextPane.setBackground(Color.LIG

19、HT_GRAY);JScrollPane jScrollPaneShow = new JScrollPane(showTextPane);splitPane_1.setLeftComponent(jScrollPaneShow);inputTextPane = new JTextPane();inputTextPane.setBackground(Color.WHITE);JScrollPane jScrollPaneInput = new JScrollPane(inputTextPane);splitPane_1.setRightComponent(jScrollPaneInput);sp

20、litPane_1.setDividerLocation(280);splitPane.setDividerLocation(150);list = new JList();contentPane.add(list, BorderLayout.EAST);list.setModel(new DefaultListModel();public synchronized void updateStatus()DefaultListModel listModel = (DefaultListModel)list.getModel();ArrayList onlineUsers = new Array

21、List();中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日int size = listModel.getSize();for (int i = 0; i size; i+)onlineUsers.add(User)listModel.get(i);String localIP = null;trylocalIP = InetAddress.getLocalHost().getHostAddress();catch (UnknownHostEx

22、ception e)e.printStackTrace();System.out.println(localIP);int index = 0;for (Iterator iterator = UserStatus.userHashMap.values().iterator(); iterator.hasNext();)User user = (User)iterator.next();System.out.println(new StringBuilder(“user: “).append(user.getIp().toString();if (index = onlineUsers.ind

23、exOf(user) != -1)onlineUsers.set(index, user);elselistModel.add(0, user);list.repaint();statisticsLabel.setText(new StringBuilder(“在线用户: (“).append(UserStatus.userHashMap.size().append(“)“).toString();public void updateMessage()(2). MessageStyle 类import java.awt.*;import java.awt.image.BufferedImage

24、;import java.io.*;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日import javax.swing.ImageIcon;import javax.swing.JTextPane;import javax.swing.text.*;public class Me

25、ssageStylepublic MessageStyle()public static void insertMyUsername(StyledDocument doc, String username)String text = (new StringBuilder(String.valueOf(username).append(“ “).append(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“).format(new Date().toString();SimpleAttributeSet attrSet = new SimpleAttribut

26、eSet();StyleConstants.setForeground(attrSet, Color.GREEN);trydoc.insertString(doc.getLength(), (new StringBuilder(String.valueOf(text).append(“n“).toString(), attrSet);catch (BadLocationException e)e.printStackTrace();public static void insertYourUsername(StyledDocument doc, String username)String t

27、ext = (new StringBuilder(String.valueOf(username).append(“ “).append(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“).format(new Date().toString();SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setForeground(attrSet, Color.BLUE);trydoc.insertString(doc.getLength(), (new StringBuilde

28、r(String.valueOf(text).append(“n“).toString(), attrSet);catch (BadLocationException e)e.printStackTrace();中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日public static void insertMessage(StyledDocument doc, String message)SimpleAttributeSet attrSet =

29、 new SimpleAttributeSet();trydoc.insertString(doc.getLength(), (new StringBuilder(String.valueOf(message).append(“n“).toString(), attrSet);catch (BadLocationException e)e.printStackTrace();public static void insertInfo(StyledDocument doc, String info)String text = (new StringBuilder(String.valueOf(n

30、ew SimpleDateFormat(“yyyy-MM-dd HH:mm:ss“).format(new Date().append(“n“).append(info).toString();SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setForeground(attrSet, Color.GRAY);trydoc.insertString(doc.getLength(), (new StringBuilder(String.valueOf(text).append(“n“).toString()

31、, attrSet);catch (BadLocationException e)e.printStackTrace();public static void insertImage(JTextPane jTextPane, File file)jTextPane.setCaretPosition(jTextPane.getStyledDocument().getLength();jTextPane.insertIcon(new ImageIcon(file.getPath();insertMessage(jTextPane.getStyledDocument(), “);public sta

32、tic void insertImage(JTextPane jTextPane, Image image)jTextPane.setCaretPosition(jTextPane.getStyledDocument().getLength();jTextPane.insertIcon(new ImageIcon(image);insertMessage(jTextPane.getStyledDocument(), “);中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011

33、 年 7 月 15 日public static byte imageToBytes(Image image, String format)BufferedImage bImage = new BufferedImage(image.getWidth(null), image.getHeight(null), 2);Graphics bg = bImage.getGraphics();bg.drawImage(image, 0, 0, null);bg.dispose();ByteArrayOutputStream out = new ByteArrayOutputStream();tryIm

34、ageIO.write(bImage, format, out);catch (IOException e)e.printStackTrace();return out.toByteArray();public static Image bytesToImage(byte bytes)Image image = Toolkit.getDefaultToolkit().createImage(bytes);tryMediaTracker mt = new MediaTracker(new Label();mt.addImage(image, 0);mt.waitForAll();catch (I

35、nterruptedException e)e.printStackTrace();return image;(3). ReceiveMulticasMessage 类import .*;import java.util.HashMap;import javax.swing.JTextPane;/ Referenced classes of package cugb.cs:/ UserStatus, User, ChatMain, MessageStyle中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵

36、敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日public class ReceiveMulticastMessage extends Threadprivate ChatMain chatMain;private int port;private DatagramPacket dPacket;private MulticastSocket multicastSocket;private String multicastAddress;public ReceiveMulticastMessage(ChatMain chatMain)port = 8886;multicastAddre

37、ss = “224.0.0.1“;this.chatMain = chatMain;public void run()byte buffer = new byte0x500000;dPacket = new DatagramPacket(buffer, buffer.length);dotrymulticastSocket = new MulticastSocket(port);multicastSocket.joinGroup(InetAddress.getByName(multicastAddress);multicastSocket.receive(dPacket);String mes

38、sage = new String(dPacket.getData(), 0, dPacket.getLength();String ip = dPacket.getAddress().getHostAddress();String username = (User)UserStatus.userHashMap.get(ip).getUsername();MessageStyle.insertYourUsername(chatMain.getShowTextPane().getStyledDocument(), username);MessageStyle.insertMessage(chat

39、Main.getShowTextPane().getStyledDocument(), message);catch (Exception e)e.printStackTrace();while (true);中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日(4). ReceiveUseStatus 类import java.io.PrintStream;import .*;/ Referenced classes of package cugb.

40、cs:/ SendUserStatus, UserStatus, ChatMainpublic class ReceiveUserStatus extends Threadprivate ChatMain chatMain;private int udpPort;private DatagramPacket dPacket;private MulticastSocket multicastSocket;private String multicastAddress;public ReceiveUserStatus(ChatMain chatMain)udpPort = 8885;multica

41、stAddress = “224.0.0.1“;this.chatMain = chatMain;public void run()byte buffer = new byte1024;dPacket = new DatagramPacket(buffer, buffer.length);tryInetAddress sendAddress = InetAddress.getByName(multicastAddress);multicastSocket = new MulticastSocket(udpPort);multicastSocket.joinGroup(sendAddress);

42、catch (Exception e1)e1.printStackTrace();dotrymulticastSocket.receive(dPacket);String string = new String(dPacket.getData(), 0, dPacket.getLength();System.out.println(string);if (string.startsWith(“hi“)中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15 日

43、(new SendUserStatus(“hello“).start();(new UserStatus(chatMain, string, dPacket.getAddress().getHostAddress().start();catch (Exception e)e.printStackTrace();while (true);(5). SendMessage 类import .*;import javax.swing.JTextPane;/ Referenced classes of package cugb.cs:/ ChatMain, MessageStylepublic cla

44、ss SendMessage extends Threadprivate JTextPane inputPane;private JTextPane showPane;private String toIP;private int multicastPort;private int port;private DatagramSocket dSocket;private MulticastSocket multicastSocket;private String multicastAddress;private DatagramPacket dPacket;public SendMessage(

45、JTextPane inputPane, JTextPane showPane, String toIP)multicastPort = 8886;port = 8887;multicastAddress = “224.0.0.1“;this.inputPane = inputPane;this.showPane = showPane;this.toIP = toIP;public void run()中国地质大学(北京) 课程名称:Java 程序设计 班号:10040912 学号:1004091228 姓名:周颖颖 成绩: 任课教师: 赵敏 刘尚一 巨枫 日期: 2011 年 7 月 15

46、日String message = inputPane.getText();byte buffer = message.getBytes();tryInetAddress sendAddress = InetAddress.getByName(multicastAddress);multicastSocket = new MulticastSocket();multicastSocket.joinGroup(sendAddress);dPacket = new DatagramPacket(buffer, buffer.length, sendAddress, multicastPort);m

47、ulticastSocket.send(dPacket);inputPane.setText(“);catch (Exception e)e.printStackTrace();(6). SendUserStatus 类import java.io.PrintStream;import .*;/ Referenced classes of package cugb.cs:/ UserStatus, ChatMainpublic class SendUserStatus extends Threadprivate int udpPort;private MulticastSocket multicastSocket;private DatagramPacket dPacket;private String multicastAddress;private String code;public SendUserStatus(String code)udpPort = 8885;multica

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报