JAVA从类扩展到覆盖方法

时间:2020-06-15 18:26:06

标签: java websocket nullpointerexception extends

我正在使用websockets开发Java项目。我有一类叫做“ WebsocketClientEndpoint”的类,其中有诸如onMessage,onClose,onOpen等方法。

我试图从该类扩展,因为我想覆盖onMessage方法。

每次我尝试向服务器发送消息时,都会得到一个nullpointerexception,因为父类中的userSession为null。

这是我的WebsocketClient类。

package game_ui.client;

import game_ui.server.util.ConsoleColor;
import org.glassfish.tyrus.client.ClientManager;
import org.json.JSONObject;

import javax.websocket.*;
import java.net.URI;


@ClientEndpoint
public class WebsocketClientEndpoint {
    public Session userSession;

   public void initializeClient(URI endpointURI) {
       try {
           ClientManager client = ClientManager.createClient();
           client.connectToServer(this, endpointURI);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
   }
    @OnOpen
    public void onOpen(Session userSession) {
        System.out.println("opening websocket");
        this.userSession = userSession;
    }

    @OnClose
    public void onClose(Session userSession, CloseReason reason) {
        System.out.println("closing websocket");
        this.userSession = null;
    }

    @OnMessage
    public void onMessage(String message) {

    }


    public void sendMessage(String message) {
        this.userSession.getAsyncRemote().sendText(message);

    }



}

这是我的gameClass,我想在其中覆盖方法onMessage

我补充:

public class CrobbyController extends WebsocketClientEndpoint implements Initializable, Dialog {

在这里我要连接:


    public void connectServer() throws InterruptedException {
        try {
            this.initializeClient(new URI("ws://localhost:8025/websockets/draw"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        this.sendMessage("{\"type\": \"login\", \"username\": '" + CrobbyController.user.getUsername() + "'}");

        Thread.sleep(1000);
        System.out.println(inviteBtn.getText());

        this.sendMessage("{\"type\": \"createGame\", \"lobbyID\": '" + inviteBtn.getText().replaceAll(" ", "-") + "', \"maxPlayers\":" +  5 + "}");
    }

    @Override
    public void onMessage(String message) {
        System.out.println("hurray");
    }


    @FXML
    private void leaveLobby(MouseEvent event) {
        if(!btnLeave.isDisabled()) {
            this.sendMessage("{\"type\": \"leaveGame\", \"lobbyID\": '" + this.lobbyCodeInput.getText().trim() + "'}");
        }
    }

我总是出现以下错误:

Caused by: java.lang.NullPointerException
    at game_ui.client.WebsocketClientEndpoint.sendMessage(WebsocketClientEndpoint.java:42)
    at createLobby.CrobbyController.connectServer(CrobbyController.java:175)
    at createLobby.CrobbyController.show(CrobbyController.java:96)
    at dialog.Navigation.navigate(Navigation.java:23)
    at dashboard.viewController.DashboardC.playGame(DashboardC.java:229)

这意味着WebsocketClientEndpoint类中的userSession为空。

有什么想法吗?

0 个答案:

没有答案