Gson对java使用WebSocket时出现奇怪的NullPointerException
我正在使用java中的WebSocket连接到我的nodeJS服务器。 我还使用Gson解析请求和响应Json 我有个例外:Gson对java使用WebSocket时出现奇怪的NullPointerException,java,node.js,sockets,websocket,gson,Java,Node.js,Sockets,Websocket,Gson,我正在使用java中的WebSocket连接到我的nodeJS服务器。 我还使用Gson解析请求和响应Json 我有个例外: Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:23) 在这一行: ConnectionResponse connectionResponse = gson.fromJson(messageContainer.getMessage(), Connec
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=新的Gson();
a在之前的某个地方,由于上面的错误而崩溃。
例如,此代码不起作用:
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();
}
}
}有人能帮我解决这个问题吗?你能提供一个完整的例外情况吗?但更好的方法是使用IDE调试它,或者添加类似System.out.println()的日志记录;对于第23行中的所有对象,另一种理论认为“clientEndPoint.sendMessage”是异步调用,“new Gson()”构造函数需要足够的时间来接收服务器响应。如果您在“.gson.fromJson(messageContainer.getMessage(),…”之前添加“sleep(…)”,它将适用于任何“new gson()”位置。@MakSymprokorenko您的解决方案可以工作,非常感谢:)@MakSymprokorenko但这不是很奇怪,当gson初始化正好在clientEndpoint.sendMessage()方法之前时,它没有Thread.sleep()可以工作吗?这样,Gson的初始化时间最短。。六羟甲基三聚氰胺六甲醚