【问题标题】:Twitter4j streaming api call throwing class not found exceptionTwitter4j 流 api 调用抛出类未找到异常
【发布时间】:2016-09-23 10:46:17
【问题描述】:

我正在使用 twitter4j 编写一个实用程序类,用于多种目的。我可以根据标签、位置等搜索推文,但 Streaming API 不适合我。

我在以下博客之后写了一个带有 main 方法的类,但是我收到了 class not found 错误。我是 java 新手。

    package mytweetapp;

import twitter4j.FilterQuery;
import twitter4j.StallWarning;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.ConfigurationBuilder;

public class Stream {
    public static void main(String[] args) throws TwitterException {

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
        .setOAuthConsumerKey("*****")
        .setOAuthConsumerSecret(
                "*******")
        .setOAuthAccessToken(
                "*****")
        .setOAuthAccessTokenSecret(
                "*****");

TwitterStreamFactory tf = new TwitterStreamFactory(cb.build());
TwitterStream twitter = tf.getInstance();

StatusListener listener = new StatusListener() {

    public void onStatus(Status status) {
        System.out
                .println("@" + status.getUser().getScreenName() + " - " + status
                        .getText());
    }

    public void onDeletionNotice(
            StatusDeletionNotice statusDeletionNotice) {
        System.out
                .println("Got a status deletion notice id:" + statusDeletionNotice
                        .getStatusId());
    }

    public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
        System.out
                .println("Got track limitation notice:" + numberOfLimitedStatuses);
    }

    public void onScrubGeo(long userId, long upToStatusId) {
        System.out
                .println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
    }

    public void onException(Exception ex) {
        ex.printStackTrace();
    }

    @Override
    public void onStallWarning(StallWarning arg0) {
        // TODO Auto-generated method stub

    }
};

FilterQuery fq = new FilterQuery();
String keywords[] = { "Mango", "Banana" };

fq.track(keywords);

twitter.addListener(listener);
twitter.filter(fq);
}

错误

    Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/internal/http/HttpClientWrapperConfiguration
    at twitter4j.TwitterStreamFactory.<clinit>(TwitterStreamFactory.java:40)
    at mytweetapp.Stream.main(Stream.java:23)
Caused by: java.lang.ClassNotFoundException: twitter4j.internal.http.HttpClientWrapperConfiguration
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

【问题讨论】:

  • 您是从 IDE/mvn cli 内部运行它吗?您能否将整个项目上传到 github,以便可以回答上下文问题(例如,您有哪个版本,您的类路径是什么,...)
  • @Ivan 我通过调用主方法 twitter4j-core-4.0.4.jar 在 eclipse 上运行这个类 twitter4j-stream-3.0.3.jar 是 jar 版本以及你是什么类路径你问的是这门课吗?我对这一切都很陌生
  • 您可以将整个文件夹与 .jar、.project、.classpath、.java 和其他文件一起上传到例如github 方便其他人调试。
  • @Ivan 我已将项目上传到 gDrive,因为我无法放到 github 上。 drive.google.com/file/d/0B0gxtpfo7Zs1dnk1QmZiZTUwY28/…
  • 您可以尝试使用相同版本的核心和流 jar 并报告这是否适合您,如果不适合上传项目?

标签: java classnotfoundexception twitter4j twitter-streaming-api


【解决方案1】:

我目前的假设是问题是由于混合了不同版本的核心和流 jar(例如,stream-3.0.3 中的 TwitterStreamFactory 期望 HttpClientWrapperConfiguration 在您的类路径中可用,但在 4.0.4 中不再包含它。请尝试包含相同版本的那些(并且只有一个版本的 lib,所以 stream-3 和 stream-4 一起包含是不行的)。如果这不起作用 - 在某个地方共享整个项目以获得更多上下文。

至于什么是类路径,您可以谷歌搜索,或者阅读例如这里What is a classpath?

【讨论】:

猜你喜欢
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多