运行服务器端,抛出异常Exception in thread "Thread-0" java.lang.NullPointerException at com

xm286651831 2012-02-10 06:46:29
运行服务器端。抛出空指针异常
出现异常的 语句是 关闭输入流ois.close;



package com.pb.server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

import com.pb.entity.Book;
import com.pb.entity.Member;
import com.pb.util.Datas;
import com.pb.util.SysConstants;
import com.pb.util.Tools;

public class ServerContextListener extends Thread {

/**
* @param args
*/
public static void main(String[] args) {
new ServerContextListener().start();
}
public void run(){
System.out.println("服务器端启动");
//创建服务器socket相关实例
ServerSocket serverSocket = null;
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null ;
try {
// 创建Socket对象
serverSocket = new ServerSocket(Integer.parseInt(Tools
.getValue(SysConstants.SYS_LISTENERPORT)));
while(true){
// 获取客户端Socket对象
socket = serverSocket.accept();
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
//创建服务器端服务类对象
ServerService serverService = new ServerService();
//获取获取客户端请求的对象
Datas datas = (Datas) ois.readObject();
// 判断客户端请求的操作
if (SysConstants.SYS_LOGIN.equals(datas.getFlag())) {
// 登录
String username = datas.getMember().getUsername();
String password = datas.getMember().getPassword();
Member member = serverService.doLogin(username, password);
if (member == null) {
datas.setFlag(SysConstants.SYS_ERROR);
} else {
datas.setMember(member);
datas.setFlag(SysConstants.SYS_SUCCESS);
}
}else if(SysConstants.SYS_ENROLL.equals(datas.getFlag())){
//注册
String username = datas.getMember().getUsername();
String password = datas.getMember().getPassword();
Member member = serverService.enroll(username, password);
if(member==null){
datas.setFlag(SysConstants.SYS_ERROR);
}else{
datas.setMember(member);
datas.setFlag(SysConstants.SYS_SUCCESS);
}
}else
oos.writeObject(datas);
oos.flush();
socket.shutdownOutput();
}

}catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
ois.close();
oos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("服务器终止");
}
}
...全文
1868 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
木木君_ 2013-04-16
  • 打赏
  • 举报
回复
我也遇到这个问题,现在还没解决,已经快要交大作业了,求指导
木木君_ 2013-04-16
  • 打赏
  • 举报
回复
那是什么问题啊
xm286651831 2012-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenliuyang 的回复:]

try {
ois.close();
oos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
ois有可能指向null 你都加个if判断非空在去close
[/Quote]

问题解决了。虽然不是你说的办法 但还是有启发
chenliuyang 2012-02-11
  • 打赏
  • 举报
回复
try {
ois.close();
oos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
ois有可能指向null 你都加个if判断非空在去close
xm286651831 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]

抛空指针异常之前是不是应该还有个别的什么异常?
[/Q
没有啊
这是异常信息
服务器端启动
Exception in thread "Thread-0" java.lang.NullPointerException
at com.pb.server.ServerContextListener.run(ServerContextListener.java:125)
程序员菜鸟北 2012-02-10
  • 打赏
  • 举报
回复
应该前面有异常把,所以ois未实例化
MiceRice 2012-02-10
  • 打赏
  • 举报
回复
抛空指针异常之前是不是应该还有个别的什么异常?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧