Java twitter4j 2.2.5中的空指针异常

Java twitter4j 2.2.5中的空指针异常,java,exception,twitter,twitter4j,Java,Exception,Twitter,Twitter4j,我必须得到与搜索查询相关的推文。所以我用的是twitter4j2.2.5。当我输入一个单词进行搜索时,它会给出错误 我必须访问twitter中的tweets,并将其存储在数据库中,然后用java进行情感分析 public class TweetOperator { private static final String consumerKey = "XXXXXXXXXXXXXXXXxxxxxxxxxxx"; private static final String consum

我必须得到与搜索查询相关的推文。所以我用的是twitter4j2.2.5。当我输入一个单词进行搜索时,它会给出错误

我必须访问twitter中的tweets,并将其存储在数据库中,然后用java进行情感分析

public class TweetOperator {


    private static final String consumerKey = "XXXXXXXXXXXXXXXXxxxxxxxxxxx";
    private static final String consumerSecret = "XXXXXXXXXXXXXXXXxxxxxxxxxxx";;
    private static final String tokenKey = "XXXXXXXXXXXXXXXXxxxxxxxxxxx";;
    private static final String tokenSecret = "XXXXXXXXXXXXXXXXxxxxxxxxxxx";;



    Twitter twitter;


    public TweetOperator(int mode) {
        try {
            db = Operator.getInstance();
        } catch(Exception ex) {
            ex.printStackTrace();
        }
        this.mode = mode;

        AccessToken token = new AccessToken(tokenKey, tokenSecret);
        twitter.setOAuthAccessToken(token);// Exception occurs here 
          twitter =  new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(consumerKey, consumerSecret);

    }

    @Override
    protected void finalize() throws Throwable{
        super.finalize();
    }





}
堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at sentimentanalysis.twitterapi.TweetOperator.<init>(TweetOperator.java:57)
        at sentimentanalysis.search.Search.<init>(Search.java:34)
        at sentimentanalysis.view.SentimentAnalysisView.searchSubmitActionPerformed(SentimentAnalysisView.java:249)
        at sentimentanalysis.view.SentimentAnalysisView.access$200(SentimentAnalysisView.java:22)
        at sentimentanalysis.view.SentimentAnalysisView$3.actionPerformed(SentimentAnalysisView.java:135)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6505)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
        at java.awt.Component.processEvent(Component.java:6270)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:694)
        at java.awt.EventQueue$3.run(EventQueue.java:692)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:708)
        at java.awt.EventQueue$4.run(EventQueue.java:706)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常 twitterapi.TweetOperator.(TweetOperator.java:57) 搜索(search.java:34) 在momentanalysis.view.momentanalysisview.searchSubmitActionPerformed(momentanalysisView.java:249) 在mountainAnalysis.view.mountainAnalysisView.access$200(mountainAnalysisView.java:22) 在感伤分析.view.感伤分析视图$3.actionPerformed(感伤分析视图.java:135) 在javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:2018) 位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402) 在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259) 在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252) 位于java.awt.Component.ProcessMouseeEvent(Component.java:6505) 位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3320) 位于java.awt.Component.processEvent(Component.java:6270) 位于java.awt.Container.processEvent(Container.java:2229) 位于java.awt.Component.dispatchEventImpl(Component.java:4861) 位于java.awt.Container.dispatchEventImpl(Container.java:2287) 位于java.awt.Component.dispatchEvent(Component.java:4687) 位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4832) 位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4492) 位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 位于java.awt.Container.dispatchEventImpl(Container.java:2273) 位于java.awt.Window.dispatchEventImpl(Window.java:2719) 位于java.awt.Component.dispatchEvent(Component.java:4687) 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 在java.awt.EventQueue.access$200(EventQueue.java:103) 位于java.awt.EventQueue$3.run(EventQueue.java:694) 在java.awt.EventQueue$3.run(EventQueue.java:692) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在java.awt.EventQueue$4.run(EventQueue.java:708) 在java.awt.EventQueue$4.run(EventQueue.java:706) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
在调用
twitter.setOAuthAccessToken
后,您将
twitter
分配给
new TwitterFactory().getInstance()
twitter
实例变量被初始化为null,您将得到null指针异常

更改行顺序应该可以:

twitter =  new TwitterFactory().getInstance();
twitter.setOAuthAccessToken(token);

调用
twitter.setOAuthAccessToken
后,您将
twitter
分配给
new TwitterFactory().getInstance()
twitter
实例变量被初始化为null,您将得到null指针异常

更改行顺序应该可以:

twitter =  new TwitterFactory().getInstance();
twitter.setOAuthAccessToken(token);

最近Twitter升级了API,只接受SSL请求。但是TwitterFactory默认禁用SSL

添加到Nigel Tufnel代码中,更新代码如下

    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.setUseSSL(true);

    TwitterFactory factory = new TwitterFactory(builder.build());
    Twitter twitter = factory.getInstance();
这条推特是一条被抹黑的消息。Status是我们需要使用的新界面。请检查下面的示例程序

package twitter;
import java.util.List;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.conf.ConfigurationBuilder;
public class XYZ {
public static void main(String[] args) {
    String oauth_consumer_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String oauth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String oauth_consumer_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    String oauth_token_secret ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.setUseSSL(true);
    TwitterFactory factory = new TwitterFactory(builder.build());
    Twitter twitter = factory.getInstance();

    twitter.setOAuthConsumer(oauth_consumer_key, oauth_consumer_secret);
    AccessToken accessToken = new AccessToken(oauth_token, oauth_token_secret);         
    twitter.setOAuthAccessToken(accessToken);  

    Query arg0 = new Query("query");
    try {
        QueryResult queryResult = twitter.search(arg0 );
        System.out.println(queryResult.getCount());
        List<Status> statuses = queryResult.getTweets();
        for(Status status:statuses){
            System.out.println(status.getText());
        }

    } catch (TwitterException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
packagetwitter;
导入java.util.List;
导入twitter4j.Query;
导入twitter4j.QueryResult;
导入twitter4j.状态;
导入twitter4j.Twitter;
导入twitter4j.TwitterException;
导入twitter4j.TwitterFactory;
导入twitter4j.auth.AccessToken;
导入twitter4j.conf.ConfigurationBuilder;
公共类XYZ{
公共静态void main(字符串[]args){
字符串oauth_consumer_key=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
字符串oauth_token=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
字符串oauth_consumer_secret=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
字符串oauth_token_secret=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
ConfigurationBuilder=新的ConfigurationBuilder();
builder.setusesl(true);
TwitterFactory=newTwitterFactory(builder.build());
Twitter=factory.getInstance();
setOAuthConsumer(oauth_consumer_key,oauth_consumer_secret);
AccessToken AccessToken=新的AccessToken(oauth_token,oauth_token_secret);
setOAuthAccessToken(accessToken);
查询arg0=新查询(“查询”);
试一试{
QueryResult QueryResult=twitter.search(arg0);
System.out.println(queryResult.getCount());
列表状态=queryResult.getTweets();
用于(状态:状态){
System.out.println(status.getText());
}
}捕获(twitter异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}