解释代码 public void run() { //获取socket对象 try { socket = new Socket(hostname, port); outputStream = socket.getOutputStream(); oos = new ObjectOutputStream(outputStream); inputStream = socket.getInputStream(); ois = new ObjectInputStream(inputStream); connect(); while (socket.isConnected()) { Message message = (Message)ois.readObject(); if (message != null) { switch (message.getType()) { case NOTIFICATION: LoginController.getInstance().showScene(); chatController.notify(message.getName() + "加入聊天",message.getPicture(),"新朋友加入","sounds/Global.wav"); break; case ERROR: chatController.notify(message.getMsg(),message.getPicture(),"出问题了","sounds/system.wav"); break; case JOINED: case DISCONNECTED: chatController.setUserList(message); break; case TEXT: chatController.showMsg(message); break; } } } } catch (Exception e) { e.printStackTrace(); } }
时间: 2023-06-11 18:07:07 浏览: 116
这段代码是一个线程的 run() 方法。它首先创建一个 Socket 对象,用于连接到主机名为 hostname,端口号为 port 的服务器。然后它获取该 Socket 对象的输入输出流,并创建相应的对象输入输出流。接下来,该方法调用 connect() 方法,该方法在连接成功时会执行一些操作。然后,该方法进入一个 while 循环,不断从输入流中读取消息,并根据消息类型进行不同的操作。如果读取到的消息为 null,那么该线程将一直阻塞在 ois.readObject() 方法处,直到有新的消息到来。如果读取到的消息不为 null,则根据消息类型进行相应的操作,包括显示通知、显示错误信息、更新用户列表和显示聊天消息。
需要注意的是,该代码可能会抛出一些异常,因此需要在 catch 块中对异常进行处理。如果发生异常,该线程将打印异常信息并退出。
相关问题
解释这段代码public void run() { //获取socket对象 try { socket = new Socket(hostname, port); outputStream = socket.getOutputStream(); oos = new ObjectOutputStream(outputStream); inputStream = socket.getInputStream(); ois = new ObjectInputStream(inputStream); connect(); while (socket.isConnected()) { Message message = (Message)ois.readObject(); if (message != null) { switch (message.getType()) { case NOTIFICATION: LoginController.getInstance().showScene(); chatController.notify(message.getName() + "加入聊天",message.getPicture(),"新朋友加入","sounds/Global.wav"); break; case ERROR: chatController.notify(message.getMsg(),message.getPicture(),"出问题了","sounds/system.wav"); break; case JOINED: case DISCONNECTED: chatController.setUserList(message); break; case TEXT: chatController.showMsg(message); break; } } } } catch (Exception e) { e.printStackTrace(); } }
这段代码是一个线程的 `run()` 方法,当该线程启动时,会创建一个 socket 对象并尝试连接到指定的主机名和端口号。如果连接成功,就会获取输入输出流,并调用 `connect()` 方法进行连接。然后,该线程进入一个循环,不断地读取从输入流中传来的消息对象,并根据消息类型进行相应的处理。
具体来说,当接收到一个 `NOTIFICATION` 类型的消息时,会调用 `LoginController` 的 `showScene()` 方法显示聊天窗口,并调用 `chatController` 的 `notify()` 方法向用户发送通知消息。
当接收到一个 `ERROR` 类型的消息时,会调用 `chatController` 的 `notify()` 方法向用户发送错误消息。
当接收到一个 `JOINED` 或 `DISCONNECTED` 类型的消息时,会调用 `chatController` 的 `setUserList()` 方法更新当前用户列表。
当接收到一个 `TEXT` 类型的消息时,会调用 `chatController` 的 `showMsg()` 方法将消息显示在聊天窗口中。
如果在连接过程中出现异常,就会打印出异常信息。
阅读全文