大二学生用JAVA编写即时通讯软件,出错,大牛帮看下 即时通讯服务器线程聊天界面 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是聊天界面代码package com.zx.Client;import javax.swing.SwingUtilities;import java.awt.BorderLayout;import java.awt.HeadlessException;import javax.swing.DefaultListModel;import javax.swing.JPanel;import javax.swing.JFrame;import java.awt.GridBagLayout;import javax.swing.JTextArea;import javax.swing.JScrollPane;import java.awt.GridBagConstraints;import javax.swing.JLabel;import java.awt.FlowLayout;import javax.swing.JTextField;import java.awt.Dimension;import javax.swing.JButton;import com.zx.model.Info;public class ChatFrame extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JTextArea jTextArea = null; private JPanel jPanel1 = null; private JPanel jPanel2 = null; private JLabel jLabel = null; private JScrollPane jScrollPane = null; private JLabel jLabel1 = null; private JTextField jTextField = null; private JButton jButton = null; private JLabel jLabel2 = null; private Info info; private DefaultListModel listModel; private UserServer us; /** * This method initializes jTextArea * * @return javax.swing.JTextArea */ private JTextArea getJTextArea() { if (jTextArea == null) { jTextArea = new JTextArea(); } return jTextArea; } public ChatFrame(Info info, UserServer us) throws HeadlessException { super(); this.info = info; this.us = us; jLabel2.setText("当前用户: "+info.getToUser()); setData(info); } private void setData(Info info) { // TODO Auto-generated method stub StringBuffer buf = new StringBuffer(); buf.append(jTextArea.getText()).append(" \n").append(info.getFromUser()).append(" ").append(info.getTime()).append("\n") .append(info.getContent()).append("\n\n"); jTextArea.setText(buf.toString()); } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jLabel = new JLabel(); jLabel.setText("--在线用户列表--"); jPanel1 = new JPanel(); jPanel1.setLayout(new BorderLayout()); jPanel1.add(jLabel, BorderLayout.NORTH); jPanel1.add(getJScrollPane(), BorderLayout.CENTER); } return jPanel1; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getJPanel2() { if (jPanel2 == null) { jLabel1 = new JLabel(); jLabel1.setText("请输入:"); jPanel2 = new JPanel(); jPanel2.setLayout(new FlowLayout()); jPanel2.add(jLabel1, null); jPanel2.add(getJTextField(), null); jPanel2.add(getJButton(), null); } return jPanel2; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); } return jScrollPane; } /** * This method initializes jTextField * * @return javax.swing.JTextField */ private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); jTextField.setColumns(25); } return jTextField; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setText("发送"); } return jButton; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SwingUtilities.invokeLater(new Runnable() { public void run() { ChatFrame thisClass = new ChatFrame(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } /** * This is the default constructor */ public ChatFrame() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(443, 379); this.setContentPane(getJContentPane()); this.setTitle("QQ聊天窗口"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jLabel2 = new JLabel(); jLabel2.setText("JLabel"); jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJTextArea(), BorderLayout.CENTER); jContentPane.add(getJPanel1(), BorderLayout.EAST); jContentPane.add(getJPanel2(), BorderLayout.SOUTH); jContentPane.add(jLabel2, BorderLayout.NORTH); } return jContentPane; }} // @jve:decl-index=0:visual-constraint="10,10" 这是客户端线程代码package com.zx.Client;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.Xpp3Driver;import com.zx.model.Info;import com.zx.util.InfoType;public class UserServer { private Socket socket; private DataInputStream in; private DataOutputStream out; private ChatFrame chatFrame; private LoginFrame loginFrame; public UserServer(LoginFrame loginFrame){ this.loginFrame = loginFrame; } public void login(final String username,final String password,final String ip,final int port){ Thread t = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { socket = new Socket(ip,port); out = new DataOutputStream(socket.getOutputStream()); Info info = new Info(); info.setFromUser(username); info.setInfoType(InfoType.ONLINE); XStream xStream = new XStream(new Xpp3Driver()); String xml = xStream.toXML(info); System.out.println(xml); out.writeUTF(xml); out.flush(); Thread t1 = new Thread(new UserThread()); t1.setDaemon(true); t1.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); t.start(); } public class UserThread implements Runnable { private boolean flag = true; Info info = null; public void setFlag(boolean flag) { this.flag = flag; } public UserThread() { super(); this.flag = true; } @Override public void run() { // TODO Auto-generated method stub while(flag){ try { in = new DataInputStream(socket.getInputStream()); String info_XML = in.readUTF(); XStream xStream = new XStream(new Xpp3Driver()); info = (Info)xStream.fromXML(info_XML); switch (info.getInfoType()) { case WELCOME: chatFrame = new ChatFrame(info,UserServer.this); loginFrame.dispose(); break; default: break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }} 这是服务器界面代码package com.zx.Server;import javax.swing.SwingUtilities;import java.awt.BorderLayout;import javax.swing.DefaultListModel;import javax.swing.JPanel;import javax.swing.JFrame;import java.awt.GridBagLayout;import javax.swing.JTextArea;import javax.swing.JScrollPane;import java.awt.GridBagConstraints;import javax.swing.JLabel;import java.awt.FlowLayout;import javax.swing.JTextField;import java.awt.Dimension;import java.io.IOException;import javax.swing.JButton;import javax.xml.ws.Service;public class ServerFrame extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JTextArea jTextArea = null; private JPanel jPanel1 = null; private JPanel jPanel2 = null; private JLabel jLabel = null; private JScrollPane jScrollPane = null; private JLabel jLabel1 = null; private JTextField jTextField = null; private JButton jButton = null; private JLabel jLabel2 = null; private Server ss; private DefaultListModel listModel = null; /** * This method initializes jTextArea * * @return javax.swing.JTextArea */ private JTextArea getJTextArea() { if (jTextArea == null) { jTextArea = new JTextArea(); } return jTextArea; } /** * This method initializes jPanel1 * * @return javax.swing.JPanel */ private JPanel getJPanel1() { if (jPanel1 == null) { jLabel = new JLabel(); jLabel.setText("--在线用户列表--"); jPanel1 = new JPanel(); jPanel1.setLayout(new BorderLayout()); jPanel1.add(jLabel, BorderLayout.NORTH); jPanel1.add(getJScrollPane(), BorderLayout.CENTER); } return jPanel1; } /** * This method initializes jPanel2 * * @return javax.swing.JPanel */ private JPanel getJPanel2() { if (jPanel2 == null) { jLabel1 = new JLabel(); jLabel1.setText("请输入:"); jPanel2 = new JPanel(); jPanel2.setLayout(new FlowLayout()); jPanel2.add(jLabel1, null); jPanel2.add(getJTextField(), null); jPanel2.add(getJButton(), null); } return jPanel2; } /** * This method initializes jScrollPane * * @return javax.swing.JScrollPane */ private JScrollPane getJScrollPane() { if (jScrollPane == null) { jScrollPane = new JScrollPane(); } return jScrollPane; } /** * This method initializes jTextField * * @return javax.swing.JTextField */ private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); jTextField.setColumns(25); } return jTextField; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setText("发送"); } return jButton; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SwingUtilities.invokeLater(new Runnable() { public void run() { ServerFrame thisClass = new ServerFrame(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } /** * This is the default constructor */ public ServerFrame() { super(); initialize(); stratServer(); } private void stratServer() { jTextArea.setText("服务器已启动,正在监听8090端口..."); // TODO Auto-generated method stub new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub ss = new Server(jTextArea,listModel); try { ss.startServer(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(443, 379); this.setContentPane(getJContentPane()); this.setTitle("QQ服务器窗口"); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.out.println("windowClosing()"); // TODO Auto-generated Event stub windowClosing() } }); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jLabel2 = new JLabel(); jLabel2.setText("JLabel"); jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJTextArea(), BorderLayout.CENTER); jContentPane.add(getJPanel1(), BorderLayout.EAST); jContentPane.add(getJPanel2(), BorderLayout.SOUTH); jContentPane.add(jLabel2, BorderLayout.NORTH); } return jContentPane; }} // @jve:decl-index=0:visual-constraint="10,10" 大二,你能写出来? 不然早就把问题说清楚了, 敢说不是copy的 计时器Timer有没有等待任务结束的方法 Runtime.getRuntime().exec()问题,高手帮帮忙... 关于线程控制的问题 关于流生成图片的问题,急~~ 菜鸟请教几个问题 static变量 急!JAVA实现串口通讯问题! 请教句柄在操作系统中的作用和地位? java中的多态性用什么方法来解决 2003月07月06日升星,散分500!--分五天结贴之第三帖。(次日凌晨零点结分) 【急】Java文件老是乱码的问题 关于比较函数的问题 求解
package com.zx.Client;import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.HeadlessException;import javax.swing.DefaultListModel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.GridBagLayout;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import java.awt.FlowLayout;
import javax.swing.JTextField;
import java.awt.Dimension;
import javax.swing.JButton;import com.zx.model.Info;public class ChatFrame extends JFrame { private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextArea jTextArea = null;
private JPanel jPanel1 = null;
private JPanel jPanel2 = null;
private JLabel jLabel = null;
private JScrollPane jScrollPane = null;
private JLabel jLabel1 = null;
private JTextField jTextField = null;
private JButton jButton = null;
private JLabel jLabel2 = null;
private Info info;
private DefaultListModel listModel;
private UserServer us;
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
}
return jTextArea;
} public ChatFrame(Info info, UserServer us) throws HeadlessException {
super();
this.info = info;
this.us = us;
jLabel2.setText("当前用户: "+info.getToUser());
setData(info);
} private void setData(Info info) {
// TODO Auto-generated method stub
StringBuffer buf = new StringBuffer();
buf.append(jTextArea.getText()).append(" \n").append(info.getFromUser()).append(" ").append(info.getTime()).append("\n")
.append(info.getContent()).append("\n\n");
jTextArea.setText(buf.toString());
} /**
* This method initializes jPanel1
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel1() {
if (jPanel1 == null) {
jLabel = new JLabel();
jLabel.setText("--在线用户列表--");
jPanel1 = new JPanel();
jPanel1.setLayout(new BorderLayout());
jPanel1.add(jLabel, BorderLayout.NORTH);
jPanel1.add(getJScrollPane(), BorderLayout.CENTER);
}
return jPanel1;
} /**
* This method initializes jPanel2
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel2() {
if (jPanel2 == null) {
jLabel1 = new JLabel();
jLabel1.setText("请输入:");
jPanel2 = new JPanel();
jPanel2.setLayout(new FlowLayout());
jPanel2.add(jLabel1, null);
jPanel2.add(getJTextField(), null);
jPanel2.add(getJButton(), null);
}
return jPanel2;
} /**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
}
return jScrollPane;
} /**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setColumns(25);
}
return jTextField;
} /**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("发送");
}
return jButton;
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ChatFrame thisClass = new ChatFrame();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
} /**
* This is the default constructor
*/
public ChatFrame() {
super();
initialize();
} /**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(443, 379);
this.setContentPane(getJContentPane());
this.setTitle("QQ聊天窗口");
} /**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel2 = new JLabel();
jLabel2.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJTextArea(), BorderLayout.CENTER);
jContentPane.add(getJPanel1(), BorderLayout.EAST);
jContentPane.add(getJPanel2(), BorderLayout.SOUTH);
jContentPane.add(jLabel2, BorderLayout.NORTH);
}
return jContentPane;
}} // @jve:decl-index=0:visual-constraint="10,10"
package com.zx.Client;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.Xpp3Driver;
import com.zx.model.Info;
import com.zx.util.InfoType;public class UserServer {
private Socket socket;
private DataInputStream in;
private DataOutputStream out;
private ChatFrame chatFrame;
private LoginFrame loginFrame;
public UserServer(LoginFrame loginFrame){
this.loginFrame = loginFrame;
}
public void login(final String username,final String password,final String ip,final int port){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket(ip,port);
out = new DataOutputStream(socket.getOutputStream());
Info info = new Info();
info.setFromUser(username);
info.setInfoType(InfoType.ONLINE);
XStream xStream = new XStream(new Xpp3Driver());
String xml = xStream.toXML(info);
System.out.println(xml);
out.writeUTF(xml);
out.flush();
Thread t1 = new Thread(new UserThread());
t1.setDaemon(true);
t1.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
t.start();
}
public class UserThread implements Runnable {
private boolean flag = true;
Info info = null;
public void setFlag(boolean flag) {
this.flag = flag;
}
public UserThread() {
super();
this.flag = true;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(flag){
try {
in = new DataInputStream(socket.getInputStream());
String info_XML = in.readUTF();
XStream xStream = new XStream(new Xpp3Driver());
info = (Info)xStream.fromXML(info_XML);
switch (info.getInfoType()) {
case WELCOME:
chatFrame = new ChatFrame(info,UserServer.this);
loginFrame.dispose();
break; default:
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
}
package com.zx.Server;import javax.swing.SwingUtilities;
import java.awt.BorderLayout;import javax.swing.DefaultListModel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.GridBagLayout;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import java.awt.FlowLayout;
import javax.swing.JTextField;
import java.awt.Dimension;
import java.io.IOException;import javax.swing.JButton;
import javax.xml.ws.Service;public class ServerFrame extends JFrame { private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextArea jTextArea = null;
private JPanel jPanel1 = null;
private JPanel jPanel2 = null;
private JLabel jLabel = null;
private JScrollPane jScrollPane = null;
private JLabel jLabel1 = null;
private JTextField jTextField = null;
private JButton jButton = null;
private JLabel jLabel2 = null;
private Server ss;
private DefaultListModel listModel = null;
/**
* This method initializes jTextArea
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
}
return jTextArea;
} /**
* This method initializes jPanel1
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel1() {
if (jPanel1 == null) {
jLabel = new JLabel();
jLabel.setText("--在线用户列表--");
jPanel1 = new JPanel();
jPanel1.setLayout(new BorderLayout());
jPanel1.add(jLabel, BorderLayout.NORTH);
jPanel1.add(getJScrollPane(), BorderLayout.CENTER);
}
return jPanel1;
} /**
* This method initializes jPanel2
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel2() {
if (jPanel2 == null) {
jLabel1 = new JLabel();
jLabel1.setText("请输入:");
jPanel2 = new JPanel();
jPanel2.setLayout(new FlowLayout());
jPanel2.add(jLabel1, null);
jPanel2.add(getJTextField(), null);
jPanel2.add(getJButton(), null);
}
return jPanel2;
} /**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
}
return jScrollPane;
} /**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setColumns(25);
}
return jTextField;
} /**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("发送");
}
return jButton;
} /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ServerFrame thisClass = new ServerFrame();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
} /**
* This is the default constructor
*/
public ServerFrame() {
super();
initialize();
stratServer();
} private void stratServer() {
jTextArea.setText("服务器已启动,正在监听8090端口...");
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ss = new Server(jTextArea,listModel);
try {
ss.startServer();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
} /**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(443, 379);
this.setContentPane(getJContentPane());
this.setTitle("QQ服务器窗口");
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.out.println("windowClosing()"); // TODO Auto-generated Event stub windowClosing()
}
});
} /**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel2 = new JLabel();
jLabel2.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJTextArea(), BorderLayout.CENTER);
jContentPane.add(getJPanel1(), BorderLayout.EAST);
jContentPane.add(getJPanel2(), BorderLayout.SOUTH);
jContentPane.add(jLabel2, BorderLayout.NORTH);
}
return jContentPane;
}} // @jve:decl-index=0:visual-constraint="10,10"
大二,你能写出来? 不然早就把问题说清楚了, 敢说不是copy的