我嘗試使用Twitter4j流式傳輸功能。所以我的實現是在以下類:如何正確停止並殺死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一個監聽器添加。所以我有兩個打印每個鳴叫...
如何完全殺死流?當我重新啓動時,只有最後一個StatusListener?
謝謝!
如果有人在這個職位失蹄的說明:如果您使用的身份驗證,則必須通過twitter4j.properties文件來配置twitter4j,因爲getSingleton()不接受ConfigurationBuilder – alextsil