2014-04-08 22 views
0

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

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(); 

    } 
} 

而Updater类具有这种形式:

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 
     } 
    } 

然而,当我打电话的服务器,我强制断开连接,我得到一个NullPointerException末()方法,就好像“up”变量为空。但我确定它不是null,因为我可以验证update()方法已部分完成。任何帮助?

+0

你能展示update()方法代码并发布完整的堆栈跟踪吗? – sakura

+0

你必须同步访问“up”字段;像其他人发布的那样,不能保证'@ OnMessage'在调用'@ OnClose'之前完成执行。此外,完成后,会话字段需要变化。 –

回答

0

部分完成?您不能保证这一点。在执行incoming()方法之前可能会断开用户连接。放置空检查总是比较安全的。

@OnClose 
    public void end() { 
     if(up != null){ 
      up.setActive(false); 
     } 
    }