Jetty WebSocketException无法调用方法

时间:2015-01-07 21:53:42

标签: java websocket jetty java-websocket

我正在尝试在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>
 */

正如您所知,我正在使用第一个版本的电话。 我做错了什么?

EDIT1:

我使这个方法不是最终的,并没有改变任何东西。

1 个答案:

答案 0 :(得分:2)

如果有人得到类似的例外,我就会发现问题。

问题是我的一个方法内部抛出一个未被捕获的异常。

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

修复问题的代码:

@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());

它带给你的小事。