我正在Tomcat 7服务器上实现Websockets。当客户端发送一些参数时,服务器通过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();
}
}
虽然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
}
}
然而,当我调用服务器并强制断开连接时,我在end()方法中得到一个NullPointerException,好像“up”变量为null。但我确信它不是null,因为我可以验证update()方法已部分完成。有什么帮助吗?
答案 0 :(得分:0)
部分完成?您无法保证。在执行incoming()
方法之前,用户可能会断开连接。放置空检查总是更安全。
@OnClose
public void end() {
if(up != null){
up.setActive(false);
}
}