Objectinputstream的readObject()无法读取对象,debug时不经过return,直接挂了

#学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;
	}
}

下一步就运行不下去了,怎么下一步都没反应,也没报错
下一步就运行不下去了,怎么下一步都没反应,也没报错

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值