Java WebSocket中的NullPointerException

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

我正在Tomcat7服务器上实现WebSocket。当客户端发送一些参数时,服务器通过Updater类执行一些任务。但是,我希望在连接关闭时停止所有服务器任务。这是我的服务器代码:

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
之前完成执行。此外,完成此操作后,会话字段需要不稳定。