#学Java以来遇到的最大问题
在我进行模仿QQ服务器的过程里,我遇到了一个问题,就是在运行Objectinputstream的readObject()方法的时候无法读取用户对象,debug时更是直接挂了,也没报错,想了好久也没有办法,请各路大神指教!
代码如下:
//这是服务器线程部分
public class ServerThread implements Runnable {
public int port;
public JTable table;
private ServerSocket serverSocket;
public ServerThread(int port, JTable table) {
this.port = port;
this.table = table;
new Thread(this).start();
}
-----------------------------(重点)-----------------------------------------
@Override
public void run() {
try {
System.out.println("服务器开启");
serverSocket = new ServerSocket(port);
System.out.println("等待连接");
while (true) {
// 等待连接(阻塞)
Socket socket = serverSocket.accept();
// 开启小弟线程,运行后转到客户端登录程序
new S2SocketThread(socket);
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "服务器已关闭");
System.out.println("服务器关闭");
}
}
------------------------------------------------------------------------------
}
//这是登录程序部分
@Override
public void listen() {
login_btn.addActionListener(new ActionListener() {
private SocketSingleInstance instance;
@Override
public void actionPerformed(ActionEvent e) {
// 获取用户名和密码
String name = username.getSelectedItem().toString().trim();
String pass = password.getText().trim();
//判断用户名和密码是否为空
if (PathUtil.isEmty(name) && PathUtil.isEmty(pass)) {
JOptionPane.showMessageDialog(null, "用户名或密码不能为空");
}
// 公共的数据流对象
CommondBean bean = new CommondBean();
// 登录指令
bean.setAction("login");
User u = new User();
u.setUsername(name);
u.setPassword(pass);
bean.setObj(u);
//把登录端口输入的用户信息发送到单例,并跟数据库对比
instance = SocketSingleInstance.getInstance();
instance.sendObj(bean);
//读取对象(调用readObj()方法)----------------------------------------------
CommondBean cbean = (CommondBean) instance.readObj();
// 登录成功
if (cbean.getState() == 200) {
dispose();
} else {
JOptionPane.showMessageDialog(null, cbean.getMsg());
}
}
});
}
/*
* Socket的单例模式
*/
public class SocketSingleInstance {
private InputStream in;
private OutputStream out;
private ObjectInputStream objIn;
private ObjectOutputStream objOut;
private Socket socket;
public static SocketSingleInstance instance = null;
// 同步锁
public static SocketSingleInstance getInstance() {
if (instance == null) {
synchronized (SocketSingleInstance.class) {
if (instance == null) {
instance = new SocketSingleInstance();
}
}
}
return instance;
}
private SocketSingleInstance() {
connection();
}
public void connection() {
try {
socket = new Socket(ConstantParam.ip, ConstantParam.port);
out = socket.getOutputStream();
objOut = new ObjectOutputStream(out);
in = socket.getInputStream();
objIn = new ObjectInputStream(in);
} catch (Exception e) {
e.printStackTrace();
}
}
// 发送数据流对象
public void sendObj(Object obj) {
try {
objOut.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}
}
// 接收数据------------------------------------------------
public Object readObj() {
Object obj = null;
try {
//debug到这里的时候没有返回就直接挂了,
obj = objIn.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
下一步就运行不下去了,怎么下一步都没反应,也没报错