Gson Strange NullPointerException при использовании веб-сокетов с Java - PullRequest
0 голосов
/ 03 июня 2018

Я использую веб-сокеты в Java для подключения к моему серверу 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= новый 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();
    }


}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...