【问题标题】:null cannot be cast to non-null type kotlin.String NullPointer Exceptionnull 不能强制转换为非 null 类型 kotlin.String NullPointer 异常
【发布时间】:2022-01-13 04:00:47
【问题描述】:

我在我的实体类中声明不可为空,但是当我访问这些变量时,我得到NullPointerException。我面临以下类型的错误:

java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
    at com.nilmani.chatdemochat.controller.ChatController.addUser(ChatController.kt:31) ~[main/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:569) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:524) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:458) ~[spring-messaging-5.3.13.jar:5.3.13]
    at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.13.jar:5.3.13]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

ChatMessage.kt

package com.nilmani.chatdemochat.model

import com.nilmani.chatdemochat.enum.MessageType

data class ChatMessage (
    var messageType: MessageType?=null,
    val content:String="",
    var sender:String="")

ChatController.kt

@MessageMapping("/chat/{roomId}/addUser")
fun addUser(@DestinationVariable roomId: String,@Payload chatMessage: ChatMessage,messageHeader:SimpMessageHeaderAccessor){
   val currentRoomId: String = messageHeader.sessionAttributes?.put("roo_id",roomId) as String
   if (currentRoomId != null){
       val leaveMessage = ChatMessage()
       leaveMessage.messageType = MessageType.LEAVE
       leaveMessage.sender = chatMessage.sender
       messageingTemplate.convertAndSend(format("/channel/%s",currentRoomId),leaveMessage)
   }
   messageHeader.sessionAttributes?.set("username", chatMessage.sender)
   messageingTemplate.convertAndSend(format("/channel/%s",roomId),chatMessage)
}

我在这一行得到NullPointerException

val currentRoomId: String = 
     messageHeader.sessionAttributes?.put("roo_id",roomId) as String

当加入另一个用户聊天时,它会出现这种类型的错误,并且新进入的用户无法连接到聊天应用程序。

【问题讨论】:

    标签: spring-boot kotlin


    【解决方案1】:

    messageHeader.sessionAttributes?.put("roo_id",roomId) 的结果是 null,但您尝试将其强制转换为非空字符串。

    所以要么messageHeader.sessionAttributesnull,要么put("roo_id",roomId) 的结果为空。

    【讨论】:

    • messageHeader.sessionAttributesnullroomIdnull
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多