java - Gson Strange NullPointerException 将 websockets 与 java 一起使用
问题描述
我在 java 中使用 websockets 连接到我的 nodeJS 服务器。我也在使用 Gson 来解析请求和响应 Json 的。
我有例外:
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:23)
在这条线上:
ConnectionResponse connectionResponse = gson.fromJson(messageContainer.getMessage(), ConnectionResponse.class);
如果我的 Gson 初始化不只是在 gson.toJson() 方法调用之前。
这段代码对我来说很完美:
import com.google.gson.Gson;
import java.net.URI;
import java.net.URISyntaxException;
public class Main {
public static void main(String[] args) {
try {
// open websocket
final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("ws://localhost:8000"));
// add listener
MessageContainer messageContainer = new MessageContainer();
clientEndPoint.addMessageHandler(messageContainer);
// send message to websocket
clientEndPoint.sendMessage("{\"type\":\"Connect\",\"name\":\"FrontClient\"}");
Gson gson = new Gson();
ConnectionResponse connectionResponse = gson.fromJson(messageContainer.getMessage(), ConnectionResponse.class);
System.out.println(connectionResponse.toString() + "yay");
// wait 5 seconds for messages from websocket
Thread.sleep(5000);
} catch (URISyntaxException ex) {
System.err.println("URISyntaxException exception: " + ex.getMessage());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
但是如果我移动 Gson gson = new Gson(); 之前的某个地方,它因上面的错误而崩溃。
例如,此代码不起作用:
import com.google.gson.Gson;
import java.net.URI;
import java.net.URISyntaxException;
public class Main {
public static void main(String[] args) {
try {
Gson gson = new Gson();
// open websocket
final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("ws://localhost:8000"));
// add listener
MessageContainer messageContainer = new MessageContainer();
clientEndPoint.addMessageHandler(messageContainer);
// send message to websocket
clientEndPoint.sendMessage("{\"type\":\"Connect\",\"name\":\"FrontClient\"}");
ConnectionResponse connectionResponse = gson.fromJson(messageContainer.getMessage(), ConnectionResponse.class);
System.out.println(connectionResponse.toString() + "yay");
// wait 5 seconds for messages from websocket
Thread.sleep(5000);
} catch (URISyntaxException ex) {
System.err.println("URISyntaxException exception: " + ex.getMessage());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
或这个:
import com.google.gson.Gson;
import java.net.URI;
import java.net.URISyntaxException;
public class Main {
public static void main(String[] args) {
try {
// open websocket
final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("ws://localhost:8000"));
// add listener
MessageContainer messageContainer = new MessageContainer();
clientEndPoint.addMessageHandler(messageContainer);
Gson gson = new Gson();
// send message to websocket
clientEndPoint.sendMessage("{\"type\":\"Connect\",\"name\":\"FrontClient\"}");
ConnectionResponse connectionResponse = gson.fromJson(messageContainer.getMessage(), ConnectionResponse.class);
System.out.println(connectionResponse.toString() + "yay");
// wait 5 seconds for messages from websocket
Thread.sleep(5000);
} catch (URISyntaxException ex) {
System.err.println("URISyntaxException exception: " + ex.getMessage());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
解决方案
推荐阅读
- mysql - 如果行不存在,我如何插入,否则更新该行?
- google-colaboratory - 我的错误是 FileNotFoundError: [Errno 2] No such file or directory: 'resources/data/OTH/stream1_obs_data_5_20_train.pkl'
- python - 将轴传递给函数并创建子图
- grep - grep 计算一行单个模式中的所有匹配项
- ajax - Typo3 - 通过 Ajax/前端以编程方式创建页面和内容元素
- reactjs - 开玩笑地测试多个获取请求
- sql - 在 sqlite3 中查找给定月份的天数
- spring - spring-data-jpa 注释在 webflux 环境中不起作用吗?
- graph - 如何使用jgrapht修剪给定距离K的图?
- nginx - 在 vitejs 中构建和使用基本属性时出现“加载模块脚本失败”错误