A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

tomTemp

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

窗口只能显示一部分,要么是上面的对话框,要么显示底下的发送,抖屏等操作的操作框
C:\Users\Tom\Desktop\asdasd.png
本来是显示正常的,就是添加了一行获取本机ip的代码就不行了,以下是源码
  1. package chatClub;

  2. import java.awt.BorderLayout;
  3. import java.awt.Button;
  4. import java.awt.Color;
  5. import java.awt.Font;
  6. import java.awt.Frame;
  7. import java.awt.Panel;
  8. import java.awt.TextArea;
  9. import java.awt.TextField;
  10. import java.awt.Toolkit;
  11. import java.awt.event.ActionEvent;
  12. import java.awt.event.ActionListener;
  13. import java.awt.event.KeyAdapter;
  14. import java.awt.event.KeyEvent;
  15. import java.awt.event.WindowAdapter;
  16. import java.awt.event.WindowEvent;
  17. import java.io.BufferedWriter;
  18. import java.io.ByteArrayOutputStream;
  19. import java.io.FileInputStream;
  20. import java.io.FileWriter;
  21. import java.io.IOException;
  22. import java.net.DatagramPacket;
  23. import java.net.DatagramSocket;
  24. import java.net.InetAddress;
  25. import java.net.UnknownHostException;
  26. import java.text.SimpleDateFormat;
  27. import java.util.Date;


  28. public class QQFrame extends Frame {
  29.         private static final long serialVersionUID = 1L;
  30.         private static final int port = 6666;
  31.         private TextField tf_ip;
  32.         private Button send;
  33.         private Button record;
  34.         private Button clean;
  35.         private Button shake;
  36.         private TextArea ta_view;
  37.         private TextArea ta_send;
  38.         private DatagramSocket socket;
  39.         private BufferedWriter logFile;

  40.         public QQFrame() throws Exception {
  41.                 init();
  42.                 southPanel();
  43.                 centerPanel();
  44.                 event();
  45.         }
  46.        
  47.         private void event() {
  48.                 this.addWindowListener(new WindowAdapter() {                        // 窗口关闭
  49.                         @Override
  50.                         public void windowClosing(WindowEvent e) {
  51.                                 super.windowClosing(e);
  52.                                 socket.close();
  53.                                 try {
  54.                                         logFile.close();
  55.                                 } catch (IOException e1) {
  56.                                        
  57.                                         e1.printStackTrace();
  58.                                 }
  59.                                 System.exit(0);
  60.                         }
  61.                 });
  62.                
  63.                 send.addActionListener(new ActionListener() {
  64.                        
  65.                         @Override
  66.                         public void actionPerformed(ActionEvent e) {
  67.                                 try {
  68.                                         send();
  69.                                 } catch (IOException e1) {
  70.                                        
  71.                                         e1.printStackTrace();
  72.                                 }
  73.                         }
  74.                 });
  75.                
  76.                 record.addActionListener(new ActionListener() {
  77.                        
  78.                         @Override
  79.                         public void actionPerformed(ActionEvent e) {
  80.                                 try {
  81.                                         viewRecord();
  82.                                 } catch (IOException e1) {
  83.                                        
  84.                                         e1.printStackTrace();
  85.                                 }                        // 查看聊天记录
  86.                         }
  87.                 });
  88.                
  89.                 clean.addActionListener(new ActionListener() {
  90.                        
  91.                         @Override
  92.                         public void actionPerformed(ActionEvent e) {
  93.                                 ta_view.setText("");
  94.                         }
  95.                 });
  96.                        
  97.                 shake.addActionListener(new ActionListener() {
  98.                        
  99.                         @Override
  100.                         public void actionPerformed(ActionEvent e) {
  101.                                 try {
  102.                                         send(new byte[] {-1},tf_ip.getText());
  103.                                 } catch (IOException e1) {
  104.                                        
  105.                                         e1.printStackTrace();
  106.                                 }
  107.                         }
  108.                 });
  109.                
  110.                 ta_send.addKeyListener(new KeyAdapter() {
  111.                         @Override
  112.                         public void keyReleased(KeyEvent e) {
  113. //                                if (e.getKeyCode() == KeyEvent.VK_SPACE && e.isControlDown())
  114.                                 if (e.getKeyCode() == KeyEvent.VK_SPACE) {
  115.                                         try {
  116.                                                 send();
  117.                                         } catch (IOException e1) {
  118.                                                
  119.                                                 e1.printStackTrace();
  120.                                         }
  121.                                 }
  122.                         }
  123.                 });
  124.         }

  125.         protected void shake() throws InterruptedException {                                // 震动
  126.                 int x = this.getLocation().x;
  127.                 int y = this.getLocation().y;
  128.                
  129.                 for (int i = 0; i < 4; i++) {
  130.                         this.setLocation(x + 20, y);
  131.                         Thread.sleep(20);
  132.                         this.setLocation(x - 20, y + 20);
  133.                         Thread.sleep(20);
  134.                         this.setLocation(x, y - 20);
  135.                         Thread.sleep(20);
  136.                         this.setLocation(x, y);
  137.                 }
  138.                
  139.         }

  140.         protected void viewRecord() throws IOException {
  141.                 logFile.flush();                                // 先将缓冲区内容刷出
  142.                
  143.                 final Frame f_record = new Frame("聊天记录");
  144.                 f_record.setLocation(400, 100);
  145.                 f_record.setSize(600, 500);
  146.                 f_record.setVisible(true);
  147.                
  148.                 TextArea ta_record = new TextArea();
  149.                 f_record.add(ta_record);
  150.                 ta_record.setEditable(false);
  151.                
  152.                 /*BufferedReader br = new BufferedReader(new FileReader("record"));
  153.                 String msg;
  154.                 while ((msg = br.readLine()) != null) {
  155.                         ta_record.append(msg + "\n");
  156.                 }
  157.                 br.close();*/
  158.                
  159.                 FileInputStream fis = new FileInputStream("record");
  160.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
  161.                 byte[] arr = new byte[8192];
  162.                 int len;
  163.                 while((len = fis.read(arr)) != -1) {
  164.                         baos.write(arr, 0, len);
  165.                 }
  166.                 fis.close();
  167.                
  168.                 ta_record.setText(new String(baos.toByteArray(),0,baos.size()));
  169.                 //or baos.toString()
  170.                
  171.                 f_record.addWindowListener(new WindowAdapter() {
  172.                         //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  173.                         @Override
  174.                         public void windowClosing(WindowEvent e) {
  175.                                 f_record.dispose();                        // 为什么关闭的是另一个界面
  176. //                                System.exit(0);
  177.                                 super.windowClosing(e);
  178.                         }
  179.                        
  180.                 });
  181.         }

  182.         protected void send() throws IOException {
  183.                 String message = ta_send.getText();
  184.                 String ip = tf_ip.getText();
  185.                 ip = ip.trim() == "" ? "255.255.255.255" : ip;
  186.                 if(message.equals(""))                                                                // 忽略空发送内容
  187.                         return;                               
  188.                
  189.                 send(message.getBytes(), ip);                                                // 调用重载方法
  190.                
  191.                 // alt + shift + l 抽取局部变量
  192.                 String msgContent = "  " + getCurrentTime() + " 我 对 " +
  193.                                         (ip.equals("255.255.255.255") ? "所有人" : ip) + "说:\n" + message + "\n";
  194.                 ta_view.append(msgContent);                // 聊天窗口中显示内容
  195.                 logFile.write(msgContent);                // 将信息写出到数据库
  196.                 ta_send.setText("");                        // 设置发送窗口为空
  197.         }

  198.         public void send(byte[] arr, String ip) throws UnknownHostException,                // 重载的send
  199.                         IOException {
  200.                 DatagramPacket packet = new DatagramPacket(                       
  201.                                 arr,arr.length,InetAddress.getByName(ip),port);
  202.                 socket.send(packet);                                                                // 发送数据
  203.         }

  204.         public String getCurrentTime() {
  205.                 return new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss").format(new Date());
  206.         }

  207.         private void centerPanel() throws Exception {
  208.                 Panel center = new Panel(new BorderLayout());                // 创建事件源
  209.                 ta_view = new TextArea();
  210.                 ta_send = new TextArea(5,1);
  211.                
  212.                 center.add(ta_view,BorderLayout.CENTER);                        // 添加
  213.                 center.add(ta_send,BorderLayout.SOUTH);
  214.                
  215.                 ta_view.setEditable(false);                                                        // view不可写
  216.                 ta_view.setBackground(Color.WHITE);                                        // view设置颜色为白
  217. //                ta_view.setBackground(Color.darkGray);                                // view设置颜色为灰
  218. //                ta_send.setBackground(Color.darkGray);                                // send设置颜色为灰
  219.                
  220.                 ta_send.setFont(new Font("宋体",Font.PLAIN,18));
  221.                 ta_view.setFont(new Font("宋体",Font.PLAIN,18));
  222.                
  223.                 this.add(center,BorderLayout.CENTER);
  224.         }

  225.         private void southPanel() throws IOException {
  226.                 Panel south = new Panel();
  227.                 tf_ip = new TextField(15);
  228.                 send = new Button("发送");
  229.                 record = new Button("记录");
  230.                 clean = new Button("清屏");
  231.                 shake = new Button("抖屏");
  232.                
  233.                 south.add(tf_ip);
  234.                 south.add(send);
  235.                 south.add(record);
  236.                 south.add(clean);
  237.                 south.add(shake);
  238.                
  239.                 send.setBackground(Color.BLUE);
  240. //                send.setSize(20, 20);
  241.                
  242.                 String ipAdress = InetAddress.getLocalHost().getHostAddress();                //获取本机ip地址
  243.                 tf_ip.setText(ipAdress);
  244.                
  245.                 this.add(south,BorderLayout.SOUTH);
  246.         }

  247.         private void init() throws Exception {
  248.                 setLayout(new BorderLayout());
  249.                 setLocation(400, 100);
  250.                 setSize(600, 600);
  251.                 setTitle("咱俩聊天吧");
  252.                 setIconImage(Toolkit.getDefaultToolkit().createImage("icon.jpg"));
  253.                
  254.                 logFile = new BufferedWriter(                                        // 初始化聊天记录
  255.                                 new FileWriter("record",true));
  256.                 new Receive().start();                                                        // 开始接收消息
  257.                 socket = new DatagramSocket();
  258.                
  259.                 setVisible(true);
  260.         }
  261.        
  262.         private class Receive extends Thread {                        // 接收和发送需要同时执行,所以需要多线程的
  263.                 public void run() {
  264.                         try {
  265.                                 DatagramSocket socket = new DatagramSocket(port);
  266.                                 DatagramPacket packet = new DatagramPacket(new byte[8192], 8192);
  267.                                 int port;
  268.                                 int packetLen;
  269.                                 while (true) {
  270.                                         socket.receive(packet); // 接收信息
  271.                                         byte[] recv = packet.getData();
  272.                                         packetLen = packet.getLength();
  273.                                         if (packetLen == 1 && recv[0] == -1) {
  274.                                                 shake();
  275.                                                 continue;
  276.                                         }
  277.                                         String msg = new String(recv, 0, packet.getLength());
  278.                                         String ip = packet.getAddress().getHostAddress(); // 获取ip
  279.                                         port = packet.getPort();
  280.                                         String msgContent = "  " + getCurrentTime()
  281.                                                         + " " + ip + "-" + port + " 对你说:\n" + msg + "\n\n";
  282.                                         ta_view.append(msgContent);                // 显示收到的信息
  283.                                         logFile.write(msgContent);                // 将收到的消息保存到数据库
  284.                                 }
  285.                         } catch (IOException e) {
  286.                                
  287.                                 e.printStackTrace();
  288.                         } catch (InterruptedException e) {
  289.                                
  290.                                 e.printStackTrace();
  291.                         }
  292.                 }
  293.         }
  294.         public static void main(String[] args) throws Exception {
  295.                 new QQFrame();
  296.         }

  297. }
复制代码

2 个回复

倒序浏览
就是253行那里添加了一行代码显示就不正常了
回复 使用道具 举报
加我QQ 673862758  我刚写完我的聊天软件  或许可以帮助你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马