我正在使用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为空。
有什么想法吗?