我正在用SparkJava试用Kotlin,并且在实现WebSockets路由时遇到了困难。我正试图效仿SparkJava网站(http://sparkjava.com/tutorials/websocket-chat)上的SparkJava示例,虽然我可以让OnWebSocketConnect和OnWebSocketMessage元素工作,但OnWebSocketClose不会被选中。
我在Java中实现了这一点,以反复检查它是否是浏览器问题,而且Java fine...so --这似乎是Kotlin解释OnWebSocketClose注释的方式特有的东西。
我的代码如下所示
import spark.Spark.*
import org.eclipse.jetty.websocket.api.Session
import org.eclipse.jetty.websocket.api.annotations.*;
fun main(args: Array<String>) {
staticFileLocation("/public")
webSocket("/chat", WSHandler::class.java)
init()
}
@WebSocket
class WSHandler {
@OnWebSocketConnect
fun connected(session: Session) = println("session connected")
@OnWebSocketClose
fun closed(session: Session, statusCode: Int, reason: String) = println("closed sessions")
@OnWebSocketMessage
fun message(session: Session, message: String) = println("Got: $message")
}html / javascript等如SparkJava网站上的教程所示。
发布于 2017-06-21 07:53:29
在深深地调用closed方法时,org.eclipse.jetty.websocket.common.events.annotated.CallableMethod类中有一个错误,下面的消息如下:
指定为非空的参数为空:方法webchat.WSHandler.closed,参数原因
它与Kotlin的可空特性相关,当您使用下面的签名声明您的方法时,所有功能都很好:
fun closed(session: Session, statusCode: Int, reason: String?)https://stackoverflow.com/questions/44662272
复制相似问题