![](/img/trans.png)
[英]Dependecy injection throws an null pointer exception in javafx google juice
[英]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.