以下是兩個程式是圖形使用者界面套接字聊天程式,但是問題是第一次輸入資訊後,在對方資訊欄裡顯示消息,而第二次以及以後再輸入資訊發送後,并不在對方的資訊欄裡顯示第二次的消息,還請大家幫忙看看,謝謝啦!
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class TalkEachOther extends JFrame implements Runnable
{
private static final long serialVersionUID = -7837855188092321634L;
private Button button0,button,button1;
private JTextField text,text1;
private JPasswordField password;
private Thread thread;
private DataInputStream input;
private DataOutputStream output;
private JTextArea area,area1;
public TalkEachOther()
{
super("聊天程式1");
super.setSize(400,320);
Container c=this.getContentPane();
GridLayout grid=new GridLayout(3,1);
c.setLayout(grid);
JPanel panel=new JPanel();
Label label1=new Label("使用者名:");
text=new JTextField(8);
Label label2=new Label("使用者密碼:");
password=new JPasswordField(8);
button0=new Button("登入");
panel.add(label1);
panel.add(text);
panel.add(label2);
panel.add(password);
panel.add(button0);
text1=new JTextField(15);
text1.setEditable(false);
panel.add(text1);
c.add(panel);
JPanel panel1=new JPanel(new GridLayout(1,2));
JPanel panel1_1=new JPanel();
Label label3=new Label("請輸入資訊:");
area=new JTextArea(3,15);
area.setEditable(false);
area.setLineWrap(true);
area.setWrapStyleWord(false);
JScrollPane pane=new JScrollPane(area);
button=new Button("發送消息");
button1=new Button("清除資訊");
panel1_1.add(label3);
panel1_1.add(pane);
JPanel panel1_2=new JPanel(new FlowLayout());
JPanel panel1_2_0=new JPanel(new GridLayout(2,1));
JPanel panel1_2_1=new JPanel();
panel1_2_1.add(button);
JPanel panel1_2_2=new JPanel();
panel1_2_2.add(button1);
panel1_2_0.add(panel1_2_1);
panel1_2_0.add(panel1_2_2);
panel1_2.add(panel1_2_0);
panel1.add(panel1_1);
panel1.add(panel1_2);
c.add(panel1);
JPanel panel2=new JPanel();
area1=new JTextArea(4,32);
area1.setEditable(false);
area1.setLineWrap(true);
area1.setWrapStyleWord(false);
JScrollPane pane1=new JScrollPane(area1);
panel2.add(pane1);
c.add(panel2);
thread=new Thread(this);
MyListener listener=new MyListener();
button0.addActionListener(listener);
button.addActionListener(listener);
button1.addActionListener(listener);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setVisible(true);
thread.start();
super.setResizable(false);
}
class MyListener implements ActionListener
{
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource()==button0)
{
if(text.getText().trim().equals("leo")&&password.getText().trim().equals("12345"))
{
text1.setText("你好!尊敬的"+text.getText().trim()+"使用者");
area.setEditable(true);
area1.setEditable(true);
}
else
{
text1.setText("你輸入的使用者名或密碼有誤!");
}
}
if(arg0.getSource()==button)
{
try
{
area1.append(text.getText().trim()+":"+area.getText().trim()+"/n");
Socket socket=new Socket("localhost",4000);
output=new DataOutputStream(socket.getOutputStream());
output.writeUTF(text.getText().trim()+":"+area.getText().trim());//output 向外寫出資訊
area.setText(null);
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
System.out.println("無法連接配接");
}
}
if(arg0.getSource()==button1)
{
area.setText(null);
}
}
}
public void run()
{
try
{
ServerSocket server=new ServerSocket(4331);
Socket socket1=server.accept();
input=new DataInputStream(socket1.getInputStream());
while(true)
{
String s=input.readUTF();
area1.append(s+"/n");
}
}
catch (IOException e)
{
System.out.println("連接配接中斷");
}
}
public static void main(String[] args)
{
new TalkEachOther();
}
}
*******************************************************
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class TalkEachOther1 extends JFrame implements Runnable
{
private static final long serialVersionUID = -7837855188092321634L;
private Button button0,button,button1;
private JTextField text,text1;
private JPasswordField password;
private Thread thread;
private DataInputStream input;
private DataOutputStream output;
private JTextArea area,area1;
public TalkEachOther1()
{
super("聊天程式2");
super.setSize(400,320);
Container c=this.getContentPane();
GridLayout grid=new GridLayout(3,1);
c.setLayout(grid);
JPanel panel=new JPanel();
Label label1=new Label("使用者名:");
text=new JTextField(8);
Label label2=new Label("使用者密碼:");
password=new JPasswordField(8);
button0=new Button("登入");
panel.add(label1);
panel.add(text);
panel.add(label2);
panel.add(password);
panel.add(button0);
text1=new JTextField(15);
text1.setEditable(false);
panel.add(text1);
c.add(panel);
JPanel panel1=new JPanel(new GridLayout(1,2));
JPanel panel1_1=new JPanel();
Label label3=new Label("請輸入資訊:");
area=new JTextArea(3,15);
area.setEditable(false);
area.setLineWrap(true);
area.setWrapStyleWord(false);
JScrollPane pane=new JScrollPane(area);
button=new Button("發送消息");
button1=new Button("清除資訊");
panel1_1.add(label3);
panel1_1.add(pane);
JPanel panel1_2=new JPanel(new FlowLayout());
JPanel panel1_2_0=new JPanel(new GridLayout(2,1));
JPanel panel1_2_1=new JPanel();
panel1_2_1.add(button);
JPanel panel1_2_2=new JPanel();
panel1_2_2.add(button1);
panel1_2_0.add(panel1_2_1);
panel1_2_0.add(panel1_2_2);
panel1_2.add(panel1_2_0);
panel1.add(panel1_1);
panel1.add(panel1_2);
c.add(panel1);
JPanel panel2=new JPanel();
area1=new JTextArea(4,32);
area1.setEditable(false);
area1.setLineWrap(true);
area1.setWrapStyleWord(false);
JScrollPane pane1=new JScrollPane(area1);
panel2.add(pane1);
c.add(panel2);
thread=new Thread(this);
MyListener listener=new MyListener();
button0.addActionListener(listener);
button.addActionListener(listener);
button1.addActionListener(listener);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setVisible(true);
thread.start();
super.setResizable(false);
}
class MyListener implements ActionListener
{
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource()==button0)
{
if(text.getText().trim().equals("lee")&&password.getText().trim().equals("12345"))
{
text1.setText("你好!尊敬的"+text.getText().trim()+"使用者");
area.setEditable(true);
area1.setEditable(true);
}
else
{
text1.setText("你輸入的使用者名或密碼有誤!");
}
}
if(arg0.getSource()==button)
{
try
{
area1.append(text.getText().trim()+":"+area.getText().trim()+"/n");
Socket socket=new Socket("localhost",4331);
output=new DataOutputStream(socket.getOutputStream());
output.writeUTF(text.getText().trim()+":"+area.getText().trim());//output 向外寫出資訊
area.setText(null);
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
System.out.println("無法連接配接");
}
}
if(arg0.getSource()==button1)
{
area.setText(null);
}
}
}
public void run()
{
try
{
ServerSocket server=new ServerSocket(4000);
Socket socket1=server.accept();
input=new DataInputStream(socket1.getInputStream());
while(true)
{
String s=input.readUTF();
area1.append(s+"/n");
}
}
catch (IOException e)
{
System.out.println("連接配接中斷");
}
}
public static void main(String[] args)
{
new TalkEachOther1();
}
}