我尝试使用 Twitter4j 流媒体功能。所以我的实现是在下面的类中:
public class TweetsStream {
private TwitterStream m_twitterstream;
private StatusListener m_statusListener;
public void printStream(...)
// Stream
m_twitterstream = null;
m_twitterstream = TwitterStreamFactory.getSingleton();
// Listener
m_statusListener = new StatusListenerRedefined(...);
m_twitterstream.addListener(m_statusListener);
// Filter
FilterQuery l_filter = new FilterQuery();
l_filter.track(... );
// Launch
m_twitterstream.filter(l_filter);
}
public void stopStream(){
m_twitterstream.shutdown();
m_logger.info("shutdown done");
m_twitterstream = null;
m_statusListener = null;
}
}
我的新 StatusListener() 在控制台中打印状态。
TweetsStream
然后我在另一个 servlet 类中创建一个对象:
@WebServlet("/Controler")
public class Controler extends HttpServlet {
private static final long serialVersionUID = 1L;
// Logger
protected final static Logger m_logger = Logger.getLogger("Controler");
//Stream
private TweetsStream m_tweetStream;
//Function...
m_tweetStream = new TweetsStream(...);
m_tweetStream.printStream(...);
}
流完美地工作。所以我现在试着阻止它。在同一堂课中,我有以下功能:
private void stopStream(){
m_tweetStream.stopStream();
m_tweetStream = null;
}
流在控制台中停止,一切都很好。
但是当我在同一个班级回忆我的功能时:
//Function...
m_tweetStream = new TweetsStream(...);
m_tweetStream.printStream(...);
就好像我刚刚恢复了以前的 m_twitterstream 并添加了一个侦听器。所以我每条推文都有两个打印...
如何完全杀死 Stream ?当我重新启动它时,怎么只有最后一个 StatusListener ?
谢谢 !