나는 웹 소켓에 대해 tutorial을 따라 왔으며 예제 코드의 작동 방식을 99 % 이해합니다. 1 %는 Dependency Injection을 다룹니다. DI를 연구 한 후에 클래스가 작동하려면 클래스의 객체 (에테르 자체 또는 다른 객체)에 의존하게된다는 것을 이해합니다. 사용 방법은 다음과 같습니다.Dependecy Injection Null Pointer Exception을 야기 함
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의 목적이 아닌가? 나는
private DeviceSessionHandler sessionHandler = new DeviceSessionHandler();
그러나
은 다음 tutorial처럼 행동하지 않는 응용 프로그램이 그렇게하도록 .... 변경하여 NPE을 방지 할 수 있어요Testing the Java WebSocket Home Application
Step 4:
에서 장치는 자바 웹 소켓 홈 서버에 추가 두 웹 브라우저에서 렌더링됩니다.
두 브라우저는 업데이트되지 않습니다. 이제는 DI가 작동하기 때문에, 또는 다른 요인 때문에 나는 그것을 모른다. 왜 Dependency Injection이 작동하지 않는지 알아내는 데 도움이 필요합니다. 그런 다음 다른 결과가 나타나는 원인인지 판단 할 수 있습니다.
더 많은 코드를 게시하거나 logcat 또는 도움이 될만한 것으로 생각하는 항목을 게시 할 수 있습니다. 감사합니다.
화레 당신은 당신의 예를 배포? –
Netbeans/Tomcat을 사용하여 로컬로 호스트하는 방법을 아직 알지 못했습니다. – chewbapoclypse
@Inject는 구성원이 "주사 가능"이라는 마커 일뿐입니다. 런타임시 실제 주입을 수행하려면 DI 프레임 워크가 필요합니다. 특정 DI 프레임 워크를 사용하고 있습니까? 그렇다면 어느 것입니까? – paulk23