簡體   English   中英

Dependecy Injection導致空指針異常

[英]Dependecy Injection causing Null Pointer Exception

好的,我一直在關注Web套接字這個教程 ,我理解99%的示例代碼如何工作。 至於1%,它處理依賴注入。 在研究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並拋出Exceptions就像它們是免費的一樣。 是不是@Inject的目的是為了防止這種情況? 我可以通過改變來阻止NPE ....

private DeviceSessionHandler sessionHandler = new DeviceSessionHandler();

但是,應用程序的行為並不像教程所說的那樣
Testing the Java WebSocket Home Application
Step 4:將設備添加到Java WebSocket Home服務器,並在兩個Web瀏覽器中呈現。

兩個瀏覽器都沒有更新。 現在我不知道是因為DI工作還是其他一些因素。 我需要幫助搞清楚為什么依賴注入不起作用,然后我可以確定這是否是導致不同結果的原因。

我可以發布更多代碼或logcat或任何你認為可能有幫助的內容。 謝謝!

很高興你意識到沒有@Inject,你只需要為它新建一個處理程序,但是,這還不夠好,你還需要靜態,因為你希望所有的客戶端共享相同的處理程序,然后任何客戶端更新設備,所有其他客戶端都可以看到它,我測試了它,它工作。

對於你的第二個問題,除了為該處理程序添加靜態,並且由於你沒有使用GlassFish,我認為你可能需要包含GlassFish“javax.json”lib,或者如果你使用maven來管理導入,你應該添加GlassFish 實現 ,而不是聲明 ,所以你應該添加:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM