我正在使用该库 https://github.com/MrStahlfelge/gdx-websockets 以及 LibGDX 和 Java。
我在处理 onMessage 方法中发生的错误时遇到困难。
即使我设置了 setSendGraceously(false),它似乎也会默默地抑制所有错误。
private WebSocket socket;
socket = WebSockets.newSocket(WebSockets.toSecureWebSocketUrl("myDomain.com", 8080));
socket.setSendGracefully(false);
socket.addListener(new WebSocketListener() {
@Override
public boolean onOpen(WebSocket webSocket) {
Gdx.app.log(TAG, "onOpen"); // line reached
return false;
}
@Override
public boolean onClose(WebSocket webSocket, int closeCode, String reason) {
Gdx.app.log(TAG, "onClose"); // line reached
return false;
}
public boolean onMessage(WebSocket webSocket, String packet) {
Gdx.app.log(TAG, "onMessage: " + packet); // line reached
Vector2 vtest = null;
try {
vtest.x = 1;
}
catch (Exception ex) {
// line not reached
Gdx.app.log(TAG, "error onMessage: " + ex.getCause().getMessage() + "; " + ex.getMessage());
} catch (Throwable throwable) { // Catch both exceptions and errors
// line not reached
Gdx.app.error(TAG, "error onMessage:", throwable);
}
return false;
}
@Override
public boolean onError(WebSocket webSocket, Throwable error) {
// it never reaches this method
Gdx.app.log(TAG, "onError: " + error.getCause().getMessage() + "; " + error.getMessage());
return false;
}
});
socket.connect();
所有其他 Gdx.app.log 行打印日志。
您有什么建议吗?我做错了什么/遗漏了什么吗?
谢谢
这是因为
NullPointerException
抛出的 vtest.x = 1;
没有根本原因,所以 getCause()
返回 null,导致当您尝试记录时另一个 NullPointerException
被抛出。
// ex.getCause() will return null here, causing the log statement to throw and not log anything
Gdx.app.log(TAG, "error onMessage: " + ex.getCause().getMessage() + "; " + ex.getMessage());
考虑使用
Gdx.app.error(TAG", "some_message", ex);
而不是
Gdx.app.log
来记录 Exception
s。