看一个聊天小程序使用了那些java技术

原创 2012年03月24日 00:22:27

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

     自学java也有一段时间了,今天写了个小程序来检验一下自己,原来在实际开发中用到的知识还挺多,一些之前不懂得知识都被带出来了,其实掌握知识还是要在不停地写代码中完成。
在网络编程知识里老师为我们讲了一个简单的聊天程序,但都是在命令行里完成的,出与好奇,也想自己做一个这样的小程序,在原有代码的基础上增加一些功能,仔细分析了一下,发现实现完整的聊天程序需要的知识真是太多了,首先聊天窗口的实现也不是简单的事(其实是会的太少了),学过的awt根本不够用,索性做个简单的窗口,后面在慢慢优化,swing还没接触过,但通过这个程序还真像赶紧学一学,知识是永远不够用的,我的实现很简单,就是有一个聊天窗口,两个文本域,与QQ相似,一个按钮发送信息,在其中一个文本域写出数据后,单击按钮发送,另一个文本域接收到数据并显示;这里就要用到多线程技术,因为要一直监听端口,Socket里有一个阻塞方法一直等待数据,所以不能与按钮的监听在同一个线程里实现,所以接受数据单独作为一个线程,经过比较发现,按钮的监听机制好像也是阻塞方法,监听方法内部传入一个对象,对象实现一个方法,与IO流的阻塞方法很像,而且程序不会因为监听的存在而停止,与多线程又有相似之处,下面写出部分代码:
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
public class TalkWin {
    private Frame f;
    private TextArea ta1,ta2;
    private Button bt;
    TalkWin() throws SocketException{
     init();
    }
    public void init(){
     f = new Frame("TalkWin");
     f.setBounds(300,400,500,400);
     f.setLayout(new FlowLayout(FlowLayout.LEADING));
     ta1 = new TextArea(14,45);
     ta2 = new TextArea(5,45);
     bt = new Button("发送");
     f.add(ta1);
     f.add(ta2);
     f.add(bt);
     myEvent();
     f.setVisible(true);
    }
    private String data;
    private void myEvent(){
     f.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
       System.exit(0);
      }
     });
     bt.addActionListener(new ActionListener(){//按钮监听到动作就发送数据
   public void actionPerformed(ActionEvent e) {
    data= ta2.getText();
    byte[] buf = data.getBytes();
    try {
    DatagramSocket ds = new DatagramSocket();
    DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.151"),10000);
     ds.send(dp);
    ta2.setText("");
    } catch (IOException e1) {
     e1.printStackTrace();
    }
   }
     });
    }
/*将操作文本框的代码封装成一个函数
    public void addText(){
     ta1.append("@我对他说::\r\n");
  ta1.append("  "+data+"\r\n");
    }

    public static void main(String[] args) throws SocketException{//主函数 
          TalkWin tw = new TalkWin();
          new Thread(new Receive(tw)).start();
    }
}
/*实现接口Runnable 实现接受数据的多线程模块*/
class Receive implements Runnable{
 private TalkWin tw;//接受数据后需要将数据写如文本框,所以传入窗体对象,方便访问文本框
 Receive(TalkWin tw){
  this.tw = tw;
 }
 public void run(){
  DatagramSocket ds = null;
  try {
   ds = new DatagramSocket(10000);
  } catch (SocketException e) {
   e.printStackTrace();
  }
     while(true){
       byte[] buf = new byte[1024];
     DatagramPacket dp = new DatagramPacket(buf,buf.length);
     try {
   ds.receive(dp);
  } catch (IOException e) {
   e.printStackTrace();
  }
     String data = new String(dp.getData());
     tw.addText();//将接收的数据写入文本框
     }
 }
}
     通过这个小程序很容易就知道自己知识的欠缺,通过不断修改代码,增加程序功能,一定会有所收获;梦想有一天写代码能像写文章一样顺畅。

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

高级java技术应用,在线聊天工具

  • 2017年08月08日 15:08
  • 13.78MB
  • 下载

享受Android应用程序的Java技术盛宴

本文介绍几种处理复杂情况的 Android SDK 工具。开发 Android 应用程序,需要最新版 Android SDK,这需要一个 Java Development Kit (JDK)。我使用的...
  • fwwdn
  • fwwdn
  • 2012年04月25日 15:06
  • 609

应用Java技术开发WAP应用程序

我们采用Tomcat作为web服务器,如果你对如何使用tomcat还不熟悉请参考相关资料。通常我们开发WAP应用程序的时候都是手写wml脚本,其实我们可以借助java的Servlet/jsp技术开发W...

一个java技术人员这么说

====================================================== 注:本文源代码点此下载 =============================...

java技术支持 输出一个菱形

/* * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. *...

java技术支持 输出一个直角三角形(上三角)

/* * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. *...

java技术支持 输出一个直角三角形(下三角)

/* * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. *...

享受Android应用程序的Java技术盛宴

 Java™ 语言是 Android 开发人员所选的工具。Android 运行时使用自己的虚拟机 Dalvik,这并不是多数程序开发人员使用的普通 Java 虚拟机。Dalvik 支持 Java 编程...

享受Android应用程序的Java技术盛宴

数据结构程序开发android多线程java 摘要:Java 语言是 Android 开发人员所选的工具。Android 运行时使用自己的虚拟机 Dalvik,这并不是多数程序开发人员使用的普通...

Android应用程序的Java技术盛宴3

Android数据库连通性 Android中一个非常有用的特征就是存在本地关系数据库。保证您能在本地文件中存储您的数据,但通常更有用的是使用一个关系型数据库管理系统(RelationalData...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:看一个聊天小程序使用了那些java技术
举报原因:
原因补充:

(最多只允许输入30个字)