Java WebSocket中的NullPointerException
我正在Tomcat7服务器上实现WebSocket。当客户端发送一些参数时,服务器通过Updater类执行一些任务。但是,我希望在连接关闭时停止所有服务器任务。这是我的服务器代码:Java WebSocket中的NullPointerException,java,jakarta-ee,nullpointerexception,websocket,Java,Jakarta Ee,Nullpointerexception,Websocket,我正在Tomcat7服务器上实现WebSocket。当客户端发送一些参数时,服务器通过Updater类执行一些任务。但是,我希望在连接关闭时停止所有服务器任务。这是我的服务器代码: public class FastServlet { private Updater up; private Session session; public FastServlet() { } @OnOpen public void start(Session s
public class FastServlet {
private Updater up;
private Session session;
public FastServlet() {
}
@OnOpen
public void start(Session session) {
this.session = session;
}
@OnClose
public void end() {
up.setActive(false);
}
@OnMessage
public void incoming(String query) {
\\ some code ...
up = new Updater(parameters, uploadedFile, session);
up.update();
}
}
更新程序类具有以下形式:
public class Updater {
private boolean active;
public Updater(Map<String, String> parameters, java.io.File uploadedFile, Session session) {
\\constructor
this.active = true;
}
public void update() {
while (active) {
\\ do stuff
}
}
公共类更新程序{
私有布尔活动;
公共更新程序(映射参数、java.io.File上载文件、会话){
\\建造师
this.active=true;
}
公共无效更新(){
while(活动){
\\做事
}
}
但是,当我调用服务器并强制断开连接时,我在end()方法中得到一个NullPointerException,就好像“up”变量为null一样。但是我确信它不是null,因为我可以验证update()方法已部分完成。是否有任何帮助?部分完成?您无法保证这一点。在执行
incoming()
方法之前,用户可能会断开连接。进行空检查总是比较安全的
@OnClose
public void end() {
if(up != null){
up.setActive(false);
}
}
您可以显示update()方法代码并发布完整堆栈跟踪吗?您必须同步对“up”字段的访问;正如其他人发布的一样,不能保证
@OnMessage
在调用@OnClose
之前完成执行。此外,完成此操作后,会话字段需要不稳定。