首页 > 解决方案 > 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();
    }


}

}

标签: javanode.jssocketswebsocketgson

解决方案


推荐阅读