我尝试使用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();

09-05 01:53