无法捕获 websocket onMessage 中的错误

问题描述 投票:0回答:1

我正在使用该库 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 行打印日志。

您有什么建议吗?我做错了什么/遗漏了什么吗?

谢谢

java error-handling libgdx
1个回答
0
投票

这是因为

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。

© www.soinside.com 2019 - 2024. All rights reserved.