【问题标题】:Exception when run the code collect tweets in java [duplicate]在java中运行代码收集推文时出现异常[重复]
【发布时间】:2014-06-20 18:24:52
【问题描述】:

我使用以下代码收集推文。编译时没有任何错误。但是当我编译这个程序时,它会显示异常。

package com.crowley.simplestream;

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

public class SimpleStream {
    public static void main(String[] args) {
        ConfigurationBuilder cb = new ConfigurationBuilder();

        cb.setDebugEnabled(true);

        cb.setOAuthConsumerKey("*********************");
        cb.setOAuthConsumerSecret("*******************");
        cb.setOAuthAccessToken("********************");
        cb.setOAuthAccessTokenSecret("*********************");

        TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

        StatusListener listener = new StatusListener() {
            @Override
            public void onException(Exception arg0) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onDeletionNotice(StatusDeletionNotice arg0) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onScrubGeo(long arg0, long arg1) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onStatus(Status status) {
                User user = status.getUser();

                // gets Username
                String username = status.getUser().getScreenName();
                System.out.println(username);
                String profileLocation = user.getLocation();
                System.out.println(profileLocation);
                long tweetId = status.getId(); 
                System.out.println(tweetId);
                String content = status.getText();
                System.out.println(content +"\n");

            }

            @Override
            public void onTrackLimitationNotice(int arg0) {
                // TODO Auto-generated method stub

            }
           @Override
           public void onStallWarning(StallWarning warning){
           }

        };
        FilterQuery fq = new FilterQuery();

        String keywords[] = {"ireland"};

        fq.track(keywords);

        twitterStream.addListener(listener);
        twitterStream.filter(fq);  

    }
}

运行此程序时遇到的异常如下。

Exception in thread "main" java.lang.NoClassDefFoundError: SimpleStream (wrong name: com/crowley/simplestream/SimpleStream)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)

我使用了 Jwitter4j。但它不包含像 ClassLoader.java 这样的包。我能做些什么?请帮帮我。

【问题讨论】:

  • (我现在把我的答案留在这里,因为它可能对提问者更有帮助;如果问题已关闭,我会删除它。)

标签: java


【解决方案1】:

您的项目是如何设置的?您是从命令行还是在 IDE 中编译和运行它?当您有一个名为 SimpleStream 的类在顶部带有 package com.crowley.simplestream; 语句时,com.crowley.simplestream.SimpleStream 是该类的完全限定名称。 javac 编译器默认会在当前目录中生成.class 文件,但它希望在您运行它时可以在com/crowley/simplestream/SimpleStream 中找到该类。

通常,您会将com.crowley.simplestream.SimpleStream 的源代码保存在项目中的文件com/crowley/simplestream/SimpleStream.java 中,通常位于srcsrc/main/java 目录下,并且您的IDE(例如Eclipse 或IDEA)将构建所有源代码将该目录中的文件放入包含所有.class 文件的并行输出目录结构中。听起来您可能正在从命令行自己构建所有内容,当然您可以这样做,但您必须考虑类的完全限定名称以及 Java 期望在哪里找到它。

例如,您可以将源放入适当的目录并在调用javac 时键入完整路径,或者您可以使用-d 切换到javac 来告诉它将@987654335 放在哪里@ 文件,然后您将在运行它时使用该类的完全限定名称:

java com.crowley.simplestream.SimpleStream

【讨论】:

  • 先生,谢谢您的解释。我使用命令行运行我的程序。
  • 现在我将包名更改为 package simplestream。我的 java 文件的位置是 E:\program files\JAVA\net\simplestream。然后我将路径设置为 E:\program files\JAVA\net\simplestream> set path=E:\program files\JAVA\bin 然后编译为 javac SimpleStream.java乙>。然后按照您所说的使用 java simplestream.SimpleStream 运行。但是现在它显示错误 Error: Could not find or load main class 'simplestream.SimpleStream, when I run the program.
  • 当我编译程序时,它会在包 simplestreamSimpleStream.classSimpleStream$1.class 的 .class 文件/b>.
  • 班级是com.crowley.simplestream.SimpleStream,而不是simplestream.SimpleStream。包是com.crowley.simplestream,你可以在你提供的源代码中看到。
  • 感谢您的解释。我现在使用 IDE 而不是命令行。我得到了输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2016-09-12
相关资源
最近更新 更多