java实现聊天室求助
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class server implements ActionListener {
int count = 0;
Vector soconly = new Vector();
HashMap sockets = new HashMap();
HashMap socket_thread = new HashMap();
ServerSocket serversocket;
JFrame frame;
JTextArea area = new JTextArea();
JPanel panel = new JPanel();
JButton start = new JButton("启动");
JButton stop = new JButton("停止");
public server() {
panel.add(start);
panel.add(stop);
frame.add(panel, BorderLayout.NORTH);///25
frame.add(area, BorderLayout.CENTER);
frame.pack();
center();
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.setVisible(true);
start.addActionListener(this);
stop.addActionListener(this);
System.out.println("new");
}
public void center() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension e = toolkit.getScreenSize();
int x = e.width / 2 - (int) (frame.getSize().getWidth() / 2);
int y = e.height / 2 - (int) (frame.getSize().getHeight() / 2);
frame.setLocation(x, y);
}
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == start) {
serverRun serverrun = new serverRun();
System.out.println("gogo");
serverrun.start();
}
if (btn == stop) {
try {
Iterator i = soconly.iterator();
while (i.hasNext()) {
Socket s = (Socket) i.next();
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
person bj = new person();
out.writeObject("系统消息-----服务器马上关闭!!!!!!请马上关闭客户端");
}
count++;
if (count == 2) {
System.exit(0);
}
JOptionPane.showMessageDialog(frame, "已通知客户端,请再次点击关闭按钮关闭");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class serverRun extends Thread {
public void run(){
try {
serversocket = new ServerSocket(9999);
System.out.println("开始SERVERRUN");
area.append("服务器启动\n");
start.setEnabled(false);
while (true) {
Socket socket = serversocket.accept();
System.out.println("连接成功");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String name = br.readLine();
area.append("服务器接收用户" + name + "的连接\n");
soconly.add(socket);
Iterator i = soconly.iterator();
while (i.hasNext()) {
Socket s = (Socket) i.next();// 获得其他SOCKET的通信口
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject("系统消息-----" + name + "用户进入" + "------");
}
Vector v = getList();
Iterator j = soconly.iterator();
while (j.hasNext()) {
Socket s = (Socket) j.next();
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(v);
System.out.println("服务器发送用户列表进入");
}
Details d = new Details(socket);
socket_thread.put(name, d);
d.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Details extends Thread {
boolean alive = true;
ObjectInputStream in;
ObjectOutputStream out;
Socket socket;
Details(Socket socket) {
this.socket = socket;
}
public void run(){
while(alive){
try{
in = new ObjectInputStream(socket.getInputStream());
person person=(person)in.readObject();
String name=person.getKey();
String content=person.getValue();
if(name.equalsIgnoreCase("all")){
Iterator i=soconly.iterator();
while(i.hasNext()){
Socket s=(Socket)i.next();
out=new ObjectOutputStream(s.getOutputStream());
out.writeObject(content);
System.out.println("Send");
}
}
if(name.equalsIgnoreCase("exit")){
Details thread=(Details)socket_thread.get(content);
thread.alive=false;
area.append(content+"离开\n");
socket.close();
soconly.remove(socket);
sockets.remove(content);
Iterator i=soconly.iterator();
while(i.hasNext()){
Socket s=(Socket)i.next();
out=new ObjectOutputStream(s.getOutputStream());
out.writeObject("系统消息-----"+content+"用户离开"+"------"); }
Vector v=getList();
Iterator j=soconly.iterator();
while(j.hasNext()){
Socket s = (Socket) j.next();
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(v);
System.out.println("服务器发送用户列表离开");
}
}
if(!name.equalsIgnoreCase("all")&!name.equalsIgnoreCase("exit")){
area.append("处理私聊信息");
Socket s=(Socket)sockets.get(name);
out=new ObjectOutputStream(s.getOutputStream());
out.writeObject(content);}
}catch(Exception e)
{e.printStackTrace();}
}
}
}
public Vector getList() {
Vector v = new Vector();
Set set = sockets.keySet();
Iterator i = set.iterator();
while (i.hasNext()) {
v.add(i.next());
}
return v;
}
public static void main(String args[]){
new server(); }///182
}
运行后服务器的小窗口弹不出来,出现以下问题,求大神解答!!!!感激!!!!
Exception in thread "main" java.lang.NullPointerException
at chat.server.<init>(server.java:25)
at chat.server.main(server.java:182)