我尝试使用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()在控制台中显示状态。
然后,在另一个servlet类中创建一个
TweetsStream
对象:@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呢?
谢谢 !
最佳答案
这是解决方案:
方法TwitterStreamFactory.getSingleton()
返回相同的TwitterStream实例。
即使您正确删除了TwitterStream对象,侦听器也存储在您的TwitterStream Singleton配置中...因此,您必须使用以下命令创建TwitterStream对象的不同实例:
TwitterStreamFactory l_Twitterfactory = new TwitterStreamFactory();
m_twitterstream = l_Twitterfactory.getInstance();