初学java,写的一个C/S网络聊天程序,在客户端出现了一些问题,代码如下:
package MultiChat.chatClient;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class chatClient {
JFrame frame = new JFrame("chat");
//JPanel panel1 = new JPanel();
//JPanel panel2 = new JPanel();
JTextField user = new JTextField(30);
JButton link = new JButton("link");
JButton disconnect = new JButton("disconnect");
JTextArea showMsg = new JTextArea(30, 30);
JTextField writeMsg = new JTextField(30);
JButton sendMsg = new JButton("send");
private static final int PORT = 30000;
Socket socket;
BufferedReader br;
PrintStream ps;
boolean tip;
//String userName = "";
public void init()
{
JPanel panel21 = new JPanel();
JPanel panel22 = new JPanel();
JPanel panel23 = new JPanel();
//user.setEditable(false);
panel21.add(user);
panel21.add(link);
panel21.add(disconnect);
showMsg.setEditable(false);
panel22.add(showMsg);
panel23.add(writeMsg);
panel23.add(sendMsg);
frame.add(panel21, BorderLayout.NORTH);
frame.add(panel22, BorderLayout.CENTER);
frame.add(panel23, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public void chat()
{
link.addActionListener(new linkActionListener());
disconnect.addActionListener(new disconnectActionListener());
sendMsg.addActionListener(new sendActionListener());
}
class linkActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
socket = new Socket("127.0.0.1", PORT);
ps = new PrintStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
tip = true;
while(tip)
{
String userName = user.getText();
ps.println(chatProtocol.USER_ROUND + userName + chatProtocol.USER_ROUND);
//接受服务器的消息
String result = br.readLine();
if(result.equals(chatProtocol.NAME_REP))
{
System.out.println("名字重复,请重新输入");
continue;
}
if(result.equals(chatProtocol.LOGIN_SUCESS))
{
System.out.println("successfull");
user.setEditable(false);
user.setText(userName);
tip = false;
//break;
}
}
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
new clientThread(br).start();
}
}
class disconnectActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(socket != null)
{
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
class sendActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String msg = sendMsg.getText();
while(msg != null)
{
if(msg.startsWith("//") && msg.indexOf(":") > 0)
{
msg = msg.substring(2);
ps.println(chatProtocol.PRIVATE_ROUND
+ msg.split(":")[0] + chatProtocol.SPLIT_SIGN
+ msg.split(":")[1] + chatProtocol.PRIVATE_ROUND);
}
else
{
ps.println(chatProtocol.MSG_ROUND + msg + chatProtocol.MSG_ROUND);
}
}
}
}
class clientThread extends Thread
{
BufferedReader br = null;
public clientThread(BufferedReader br)
{
this.br = br;
}
public void run()
{
String line = null;
try {
while((line = br.readLine()) != null)
{
showMsg.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
chatClient client = new chatClient();
client.init();
client.chat();
}
}初学的问题是:运行客户端,只要一点击link,就会卡死,请高手解答,谢谢!!!
package MultiChat.chatClient;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class chatClient {
JFrame frame = new JFrame("chat");
//JPanel panel1 = new JPanel();
//JPanel panel2 = new JPanel();
JTextField user = new JTextField(30);
JButton link = new JButton("link");
JButton disconnect = new JButton("disconnect");
JTextArea showMsg = new JTextArea(30, 30);
JTextField writeMsg = new JTextField(30);
JButton sendMsg = new JButton("send");
private static final int PORT = 30000;
Socket socket;
BufferedReader br;
PrintStream ps;
boolean tip;
//String userName = "";
public void init()
{
JPanel panel21 = new JPanel();
JPanel panel22 = new JPanel();
JPanel panel23 = new JPanel();
//user.setEditable(false);
panel21.add(user);
panel21.add(link);
panel21.add(disconnect);
showMsg.setEditable(false);
panel22.add(showMsg);
panel23.add(writeMsg);
panel23.add(sendMsg);
frame.add(panel21, BorderLayout.NORTH);
frame.add(panel22, BorderLayout.CENTER);
frame.add(panel23, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public void chat()
{
link.addActionListener(new linkActionListener());
disconnect.addActionListener(new disconnectActionListener());
sendMsg.addActionListener(new sendActionListener());
}
class linkActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
socket = new Socket("127.0.0.1", PORT);
ps = new PrintStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
tip = true;
while(tip)
{
String userName = user.getText();
ps.println(chatProtocol.USER_ROUND + userName + chatProtocol.USER_ROUND);
//接受服务器的消息
String result = br.readLine();
if(result.equals(chatProtocol.NAME_REP))
{
System.out.println("名字重复,请重新输入");
continue;
}
if(result.equals(chatProtocol.LOGIN_SUCESS))
{
System.out.println("successfull");
user.setEditable(false);
user.setText(userName);
tip = false;
//break;
}
}
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
new clientThread(br).start();
}
}
class disconnectActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(socket != null)
{
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
class sendActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String msg = sendMsg.getText();
while(msg != null)
{
if(msg.startsWith("//") && msg.indexOf(":") > 0)
{
msg = msg.substring(2);
ps.println(chatProtocol.PRIVATE_ROUND
+ msg.split(":")[0] + chatProtocol.SPLIT_SIGN
+ msg.split(":")[1] + chatProtocol.PRIVATE_ROUND);
}
else
{
ps.println(chatProtocol.MSG_ROUND + msg + chatProtocol.MSG_ROUND);
}
}
}
}
class clientThread extends Thread
{
BufferedReader br = null;
public clientThread(BufferedReader br)
{
this.br = br;
}
public void run()
{
String line = null;
try {
while((line = br.readLine()) != null)
{
showMsg.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
chatClient client = new chatClient();
client.init();
client.chat();
}
}初学的问题是:运行客户端,只要一点击link,就会卡死,请高手解答,谢谢!!!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class chatClient {
JFrame frame = new JFrame("chat");
JTextField user = new JTextField(30);
JButton link = new JButton("link");
JButton disconnect = new JButton("disconnect");
JTextArea showMsg = new JTextArea(30, 30);
JTextField writeMsg = new JTextField(30);
JButton sendMsg = new JButton("send");
private static final int PORT = 30000;
Socket socket;
BufferedReader br;
PrintStream ps;
boolean tip;
public void init()
{
JPanel panel21 = new JPanel();
JPanel panel22 = new JPanel();
JPanel panel23 = new JPanel();
panel21.add(user);
panel21.add(link);
panel21.add(disconnect);
showMsg.setEditable(false);
panel22.add(showMsg);
panel23.add(writeMsg);
panel23.add(sendMsg);
frame.add(panel21, BorderLayout.NORTH);
frame.add(panel22, BorderLayout.CENTER);
frame.add(panel23, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public void chat()
{
link.addActionListener(new linkActionListener());
disconnect.addActionListener(new disconnectActionListener());
sendMsg.addActionListener(new sendActionListener());
}
class linkActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
socket = new Socket("127.0.0.1", PORT);
ps = new PrintStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
tip = true;
while(tip)
{
String userName = user.getText();
ps.println(chatProtocol.USER_ROUND + userName + chatProtocol.USER_ROUND);
//接受服务器的消息
String result = br.readLine();
if(result.equals(chatProtocol.NAME_REP))
{
System.out.println("名字重复,请重新输入");
continue;
}
if(result.equals(chatProtocol.LOGIN_SUCESS))
{
System.out.println("successfull");
user.setEditable(false);
user.setText(userName);
tip = false;
//break;
}
}
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
new clientThread(br).start();
}
}
class disconnectActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(socket != null)
{
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
class sendActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String msg = sendMsg.getText();
while(msg != null)
{
if(msg.startsWith("//") && msg.indexOf(":") > 0)
{
msg = msg.substring(2);
ps.println(chatProtocol.PRIVATE_ROUND
+ msg.split(":")[0] + chatProtocol.SPLIT_SIGN
+ msg.split(":")[1] + chatProtocol.PRIVATE_ROUND);
}
else
{
ps.println(chatProtocol.MSG_ROUND + msg + chatProtocol.MSG_ROUND);
}
}
}
}
class clientThread extends Thread
{
BufferedReader br = null;
public clientThread(BufferedReader br)
{
this.br = br;
}
public void run()
{
String line = null;
try {
while((line = br.readLine()) != null)
{
showMsg.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
chatClient client = new chatClient();
client.init();
client.chat();
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class chatClient {
JFrame frame = new JFrame("chat");
//JPanel panel1 = new JPanel();
//JPanel panel2 = new JPanel();
JTextField user = new JTextField(30);
JButton link = new JButton("link");
JButton disconnect = new JButton("disconnect");
JTextArea showMsg = new JTextArea(30, 30);
JTextField writeMsg = new JTextField(30);
JButton sendMsg = new JButton("send");
private static final int PORT = 30000;
Socket socket;
BufferedReader br;
PrintStream ps;
boolean tip;
//String userName = "";
public void init()
{
JPanel panel21 = new JPanel();
JPanel panel22 = new JPanel();
JPanel panel23 = new JPanel();
//user.setEditable(false);
panel21.add(user);
panel21.add(link);
panel21.add(disconnect);
showMsg.setEditable(false);
panel22.add(showMsg);
panel23.add(writeMsg);
panel23.add(sendMsg);
frame.add(panel21, BorderLayout.NORTH);
frame.add(panel22, BorderLayout.CENTER);
frame.add(panel23, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public void chat()
{
link.addActionListener(new linkActionListener());
disconnect.addActionListener(new disconnectActionListener());
sendMsg.addActionListener(new sendActionListener());
}
class linkActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
socket = new Socket("127.0.0.1", PORT);
ps = new PrintStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
tip = true;
while(tip)
{
String userName = user.getText();
ps.println(chatProtocol.USER_ROUND + userName + chatProtocol.USER_ROUND);
//接受服务器的消息
String result = br.readLine();
if(result.equals(chatProtocol.NAME_REP))
{
System.out.println("名字重复,请重新输入");
continue;
}
if(result.equals(chatProtocol.LOGIN_SUCESS))
{
System.out.println("successfull");
user.setEditable(false);
user.setText(userName);
tip = false;
//break;
}
}
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
new clientThread(br).start();
}
}
class disconnectActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(socket != null)
{
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
class sendActionListener implements ActionListener
{ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String msg = sendMsg.getText();
while(msg != null)
{
if(msg.startsWith("//") && msg.indexOf(":") > 0)
{
msg = msg.substring(2);
ps.println(chatProtocol.PRIVATE_ROUND
+ msg.split(":")[0] + chatProtocol.SPLIT_SIGN
+ msg.split(":")[1] + chatProtocol.PRIVATE_ROUND);
}
else
{
ps.println(chatProtocol.MSG_ROUND + msg + chatProtocol.MSG_ROUND);
}
}
}
}
class clientThread extends Thread
{
BufferedReader br = null;
public clientThread(BufferedReader br)
{
this.br = br;
}
public void run()
{
String line = null;
try {
while((line = br.readLine()) != null)
{
showMsg.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
chatClient client = new chatClient();
client.init();
client.chat();
}
}
建议看http://topic.csdn.net/u/20120530/03/4237da30-3bfd-435e-b9b7-201054a9f3c7.html?72809