您的位置:

java聊天程序gui,java聊天程序设计

本文目录一览:

谁有java的socket的GUI聊天室程序?

给你个,但是不是很完美(可修改一下),可以完成简单的聊天功能.

源代码://liaotian.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

public class liaotian extends JFrame implements ActionListener{

public static void main(String[] args){

liaotian frame=new liaotian();

}

JButton command,command2,command3;

JRadioButton rb[]=new JRadioButton[2];

JTextArea ta1;

JTextField tf1,tf2,tf3;

ServerSocket socket1;

Socket insocket1,socket2;

String inbuf;

BufferedReader in1;

PrintWriter out1;

mt625_server t1;

mt625_client t2;

public liaotian(){

super("聊天");

Container c=getContentPane();

c.setLayout(null);

JLabel lb=new JLabel("TCP通信程序");

lb.setFont(new Font("宋体",Font.BOLD,16));

lb.setForeground(Color.black);

lb.setSize(2000,20);

lb.setLocation(10,2);

c.add(lb);

String str1[]={"服务端","客户端"};

ButtonGroup bg1=new ButtonGroup();

for(int i=0;i2;i++){

rb[i]=new JRadioButton(str1[i]);

rb[i].setFont(new Font("宋体",Font.BOLD,14));

rb[i].setForeground(Color.black);

rb[i].setSize(80,20);

rb[i].setLocation(10+i*80,27);

c.add(rb[i]);

bg1.add(rb[i]);

}

rb[0].setSelected(true);

JLabel lb1=new JLabel("连接主机IP");

lb1.setFont(new Font("宋体",Font.BOLD,16));

lb1.setForeground(Color.black);

lb1.setSize(120,25);

lb1.setLocation(16,55);

c.add(lb1);

tf1=new JTextField("59.68.255.27");

tf1.setForeground(Color.black);

tf1.setSize(250,25);

tf1.setLocation(120,55);

c.add(tf1);

command=new JButton("连接");

command.setFont(new Font("宋体",Font.BOLD,16));

command.setSize(110,20);

command.setLocation(380,55);

command.addActionListener(this);

c.add(command);

JLabel lb2=new JLabel("接收到信息");

lb2.setFont(new Font("宋体",Font.BOLD,16));

lb2.setForeground(Color.black);

lb2.setSize(120,20);

lb2.setLocation(10,85);

c.add(lb2);

ta1=new JTextArea();

ta1.setForeground(Color.black);

ta1.setSize(250,200);

ta1.setLocation(120,85);

c.add(ta1);

JLabel lb3=new JLabel("发送信息");

lb3.setFont(new Font("宋体",Font.BOLD,16));

lb3.setForeground(Color.black);

lb3.setSize(120,25);

lb3.setLocation(10,300);

c.add(lb3);

tf2=new JTextField();

tf2.setForeground(Color.black);

tf2.setSize(250,25);

tf2.setLocation(120,300);

c.add(tf2);

command2=new JButton("发送信息");

command2.setFont(new Font("宋体",Font.BOLD,16));

command2.setSize(110,25);

command2.setLocation(380,300);

command2.addActionListener(this);

command2.setEnabled(false);

c.add(command2);

JLabel lb4=new JLabel("连接状态: ");

lb4.setFont(new Font("宋体",Font.BOLD,14));

lb4.setForeground(Color.black);

lb4.setSize(120,25);

lb4.setLocation(180,27);

c.add(lb4);

tf3=new JTextField("离线");

tf3.setForeground(Color.black);

tf3.setSize(120,25);

tf3.setLocation(270,27);

c.add(tf3);

command3=new JButton("结束连接");

command3.setFont(new Font("宋体",Font.BOLD,16));

command3.setSize(110,20);

command3.setLocation(380,85);

command3.addActionListener(this);

command3.setEnabled(false);

c.add(command3);

t1=new mt625_server();

t2=new mt625_client();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(500,400);

setVisible(true);

setLocation(300,300);

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==command){

try{

if(rb[0].isSelected()==true){

inbuf="";

tf2.setText("");

t1.start();

}

else{

inbuf="";

tf2.setText("");

t2.start();

}

}

catch (Exception e2) {tf3.setText("发生错误");}

}

if(e.getSource()==command2){

out1.write(tf2.getText()+"\n");

out1.flush();

tf2.setText("");

}

if(e.getSource()==command3){

try{

if(rb[0].isSelected()==true){

insocket1.close();

tf3.setText("离线");

command2.setEnabled(false);

command3.setEnabled(false);

}

else{

socket2.close();

tf3.setText("离线!");

command2.setEnabled(false);

command3.setEnabled(false);

}

}catch (Exception e2) {tf3.setText("发生错误");}

}

}

class mt625_server extends Thread{

public mt625_server(){}

public void run(){

try{

command.setEnabled(false);

tf3.setText("正在等待连接!");

tf1.setText(Inet4Address.getLocalHost().getHostAddress());

socket1=new ServerSocket(21);

insocket1=socket1.accept();

in1=new BufferedReader(new InputStreamReader(insocket1.getInputStream()));

out1=new PrintWriter(insocket1.getOutputStream(),true);

while(true){

if(socket1.isBound()==true){

tf3.setText("正在连接!");

command2.setEnabled(true);

command3.setEnabled(true);

break;

}

}

while(true){

inbuf=in1.readLine();

if(inbuf.length()0)

{

ta1.append(inbuf);

ta1.append("\n");

}

}

}

catch(Exception e){}

}

}

class mt625_client extends Thread{

public mt625_client(){}

public void run(){

try{

command.setEnabled(false);

tf3.setText("正在等待连接!");

socket2=new Socket();

socket2.connect(new InetSocketAddress(tf1.getText(),21),5000);

in1=new BufferedReader(new InputStreamReader(socket2.getInputStream()));

out1=new PrintWriter(socket2.getOutputStream(),true);

while(true){

if(socket2.isConnected()==true){

tf3.setText("正在连接!");

command2.setEnabled(true);

command3.setEnabled(true);

break;

}

}

inbuf="";

while(true){

inbuf=in1.readLine();

if(inbuf.length()0)

{

ta1.append(inbuf);

ta1.append("\n");

}

}

}

catch(Exception e){}

}

}

}

用JAVA如何实现GUI的聊天室?只需实现基本的聊天室功能即可。希望给出服务器源代码和客户端源代码。

转自 Ian Darwin's Java Cookbook,

用的是Socket通信 + AWT实现GUI。

Code比较长,这里贴不下,可以去下面URL直接下载。

定义常量

Server端

Client端

关于用java多线程做的一个多人聊天小程序的一个问题——如何实现进程间的通信?

传统的进程间通信的方式有大致如下几种:

(1) 管道(PIPE)

(2) 命名管道(FIFO)

(3) 信号量(Semphore)

(4) 消息队列(MessageQueue)

(5) 共享内存(SharedMemory)

(6) Socket

Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。

除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。

java中GUI的实现方式是???

其实无论在什么平台下,GUI应用程序的基本开发方法都是相似的。一般都包括下面这样四个步骤:

①创建容器

首先要创建一个GUI应用程序,需要创建一个用于容纳所有其它GUI组件元素的载体,Java中称为容器。典型的包括窗口(Window)、框架(Frame/JFrame)、对话框(Dialog/JDialog)、面板(Panel/JPanel)等。只有先创建了这些容器,其它界面元素如按钮(Button/JButton)、标签(Label/JLabel)、文本框(TextField/JTextField)等才有地方放。 ②添加组件

为了实现GUI应用程序的功能,为了与用户交换,需要在容器上添加各种组件/控件。这需要根据具体的功能要求来决定用什么组件。例如,如果需要提示信息,可用标签(Label/JLabel);如果需要输入少量文本,可用文本框(TextField/JTextField);如果需要输入较多文本,可用文本区域(TextArea/JTextArea);如果需要输入密码,可用密码域(JPasswordField)等等。

③安排组件

与传统的Windows环境下的GUI软件开发工具不同,为了更好地实现跨平台,Java程序中各组件的位置、大小一般不是以绝对量来衡量,而是以相对量来衡量。例如有时候,程序的组件的位置是按"东/East"、"西/West"、"南/South"、"北/North"、"中 /Center"这种方位来标识的。因此,在组织界面时,除了要考虑所需的组件种类外,还需要考虑如何安排这些组件的位置与大小。这一般是通过设置布局管理器(Layout Manager)及其相关属性来实现的。事实上上述按方位来安排组件就是采用了Java中多种布局管理器里的BorderLayout布局管理器。

④处理事件

为了完成一个GUI应用程序所应具备的功能,除了适当地安排各种组件产生美观的界面外,还需要处理各种界面元素事件,以便真正实现与用户的交换,完成程序的功能。在Java程序中这一般是通过实现适当的事件监听者接口来完成的。比如如果需要响应按钮事件,就需要实现 ActionListener监听者接口;如果需要响应窗口事件,就需要实现WindowListener监听者接口。