我正在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();
}
}
而更新程序类具有以下形式:
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"变量是空一样。但我确信它不是空的,因为我可以验证 update() 方法是否已部分完成。有什么帮助吗?
部分完成?你不能保证这一点。用户可能会在执行incoming()
方法之前断开连接。放置空检查总是更安全。
@OnClose
public void end() {
if(up != null){
up.setActive(false);
}
}