Jetty WebSocketException 不能调用方法



我正在尝试在java中使用websockets,但遇到了这个问题:

Cannot call method public final void package.ClientWebSocket#jettyOnMessage(byte[], int, int) with args: [[B, java.lang.Integer, java.lang.Integer]

这是实际调用的代码片段

 @OnWebSocketMessage
 public final void jettyOnMessage(final byte[] data, final int offset, final int length) {
     onMessage(ByteBuffer.wrap(data, offset, length));
 }

这里有描述方法签名应该是什么的文档:

 * <u>Binary Message Versions</u>
 * <ol>
 * <li><code>public void methodName(byte buf[], int offset, int length)</code></li>
 * <li><code>public void methodName({@link Session} session, byte buf[], int offset, int length)</code></li>
 * <li><code>public void methodName(InputStream stream)</code></li>
 * <li><code>public void methodName({@link Session} session, InputStream stream)</code></li>
 * </ol>
 */

如您所见,我正在使用呼叫的第一个版本。我做错了什么?

编辑1:

我使该方法非最终的,这并没有改变任何东西。

如果

有人遇到类似的异常,我想出了这个问题。

问题是在内部,我的一种方法会引发一个未捕获的异常。

如果你在一次尝试中包装你的整个代码,你可以完全避免这个异常,并找到它被抛出的真正原因。

修复问题的代码:

@OnWebSocketMessage
public final void jettyOnMessage(final byte[] data, final int offset, final int length) {
    try {
        onMessage(ByteBuffer.wrap(data, offset, length));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

onMessage 可能会引发异常的地方

我的情况,它最终是一个 ArrayOutOfBoundsException,因为我愚蠢地做 list.get(list.size());

是小事能让你得到。

相关内容

  • 没有找到相关文章

最新更新