gpt4 book ai didi

java - 依赖注入(inject)导致空指针异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:22 26 4
gpt4 key购买 nike

好的,我一直在关注这个tutorial关于 Web Sockets,我理解 99% 的示例代码是如何工作的。至于那 1%,它处理的是依赖注入(inject)。在研究了 DI 之后,我了解到类要依赖类中的对象(ether 本身或其他对象)才能运行。下面是它的使用方法。

package org.example.websocket;

...
import javax.websocket.server.ServerEndpoint;
import javax.inject.Inject;

@ApplicationScoped
@ServerEndpoint("/actions")
public class DeviceWebSocketServer {

@Inject
private DeviceSessionHandler sessionHandler;

@OnOpen
public void open(Session session) {
}

...
}

我理解这里的理论是“DeviceWebSocketServer”类依赖于“DeviceSessionHandler”才能运行。但是,当我运行这段代码时,我在 logcat 中得到了 java.lang.NullPointerException

所以我发现原因是因为 sessionHandler 从未初始化,只是闲置为 null 并抛出异常,就像它们是免费的一样。 @Inject 的目的不是为了防止这种情况吗?我可以通过改变......来防止 NPE。

private DeviceSessionHandler sessionHandler = new DeviceSessionHandler();

但是应用程序的行为不像tutorial说它应该在
测试 Java WebSocket Home 应用程序
第 4 步:将设备添加到 Java WebSocket Home 服务器,并在两个 Web 浏览器中呈现。

两个浏览器都没有更新。现在我不知道这是因为 DI 变通还是其他一些因素。我需要帮助弄清楚为什么依赖注入(inject)不起作用,然后我可以确定这是否是导致不同结果的原因。

我可以发布更多代码或 logcat 或您认为可能有帮助的任何内容。谢谢!

最佳答案

很高兴您意识到没有@Inject,您只需要为它新建一个处理程序,但是,这还不够好,您还需要静态的,因为您希望所有客户端共享同一个处理程序,然后任何客户端更新设备,所有其他客户端都可以看到它,我测试了它,它有效。

对于你的第二个问题,除了为该处理程序添加静态之外,并且由于你没有使用 GlassFish,我假设你可能需要包含 GlassFish“javax.json”库,或者如果你使用 Maven 来管理导入,您应该添加 GlassFish 实现,而不仅仅是声明,因此您应该添加:

 <dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>

关于java - 依赖注入(inject)导致空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com