2014-06-20 5 views
0

다음 코드를 사용하여 트윗을 수집했습니다. 컴파일 할 때 오류가 없습니다. 그러나이 프로그램을 컴파일 할 때 예외를 보여줍니다.자바에서 코드를 실행할 때 예외가 발생했습니다

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와 같은 패키지는 포함되어 있지 않습니다. 내가 무엇을 할 수 있을지? 도와주세요.

+0

(질문자가 도움이 될 수 있으므로 내 대답은 여기에서 나옵니다. 질문을 닫으면 삭제할 것입니다.) –

답변

1

프로젝트는 어떻게 설정합니까? 명령 행이나 IDE에서 이것을 컴파일하고 실행하고 있습니까? package com.crowley.simplestream; 문을 맨 위에 둔 SimpleStream 클래스가 있으면 com.crowley.simplestream.SimpleStream은 클래스의 정규화 된 이름입니다. javac 컴파일러는 기본적으로 현재 디렉터리에 .class 파일을 방출하지만 실행할 때 클래스가 com/crowley/simplestream/SimpleStream에있을 것으로 예상합니다.

보통은 일반적으로 src 또는 src/main/java 디렉토리 아래에, 프로젝트의 파일 com/crowley/simplestream/SimpleStream.javacom.crowley.simplestream.SimpleStream에 대한 소스를 유지하는 것 (예 : 이클립스 또는 IDEA와 같은) 당신의 IDE는 병렬로 그 디렉토리에있는 모든 소스 파일을 구축 할 것 모든 .class 파일이있는 출력 디렉토리 구조. 커맨드 라인에서 모든 것을 직접 만들 수있는 것처럼 들리지만 물론 클래스의 정규화 된 이름을 고려해야하며 Java가 그 클래스를 찾을 수있는 곳을 고려해야합니다.

예를 들어, 당신은 적당한 디렉토리에 소스를 넣고 그것의 전체 경로를 입력 javac를 호출 할 때, 또는 당신은 .class 파일을 넣을 곳을 알려 javac-d 스위치를 사용할 수 있습니다, 당신은 것 수

+0

선생님, 설명해 주셔서 감사합니다. 커맨드 라인을 사용하여 프로그램을 실행합니다. – user3759778

+0

이제 패키지 이름을 ** package simplestream **으로 변경했습니다. 내 Java 파일의 위치는 ** E : \ program files \ JAVA \ net \ simplestream **입니다. 그런 다음 경로를 ** E : \ program files \ JAVA \ net \ simplestream로 설정하고 path = E : \ program files \ JAVA \ bin으로 설정 한 다음 ** javac SimpleStream.java **로 컴파일하십시오. 그런 다음 ** java simplestream.SimpleStream **을 사용하여 실행합니다. 하지만 지금은 오류 ** 오류 : 프로그램을 실행할 때 주 클래스 'simpleestream.SimpleStream **을 찾거나로드 할 수 없습니다. – user3759778

+0

프로그램을 컴파일하면 패키지 ** simpleestream **에 ** SimpleStream.class ** 및 ** SimpleStream $ 1.class **라는 두 개의 .class 파일이 생성됩니다. – user3759778

관련 문제