Frage

Ich bin neu in der Java-Programmierung und erhalte den viel bösartigen Fehler "ClassNotFoundException".

Das Seltsame ist, dass es gut kompiliert wird:

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg

Aber wenn ich versuche, es auszuführen, erhalte ich die folgende Fehlermeldung:

steve@steve-ThinkPad-T61:~/facebook$ java  FacebookProg  
Exception in thread "main" java.lang.NoClassDefFoundError:
org/scribe/builder/ServiceBuilder  
    at FacebookProg.main(FacebookProg.java:8)  
Caused by: java.lang.ClassNotFoundException: org.scribe.builder.ServiceBuilder  
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)  
    at java.security.AccessController.doPrivileged(Native Method)  
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)  
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)  
    ... 1 more  

Ich habe online nachgesehen und es scheint, dass Java die Bibliothek zur Laufzeit nicht finden kann, die es zur Kompilierungszeit finden konnte.Also probierte die folgenden Variationen aus:

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg  
java -cp /usr/share/java/ FacebookProg  
export CLASSPATH="/usr/share/java"; java FacebookProf  
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg  

Ich habe mehrere Stellen bei StackOverflow und Google überprüft und kann immer noch nicht herausfinden, warum.Ich bin neu in Java, also gibt es wahrscheinlich eine einfache Lösung, aber ich kann sie nicht finden.Ich verwende Sun Java 1.6 64-Bit unter Ubuntu 11.04.Der Schreiber-1.3.0.die JAR-Datei befindet sich in "/ usr / share / java", was meiner Meinung nach der kanonische Ort für Java-Pakete ist.

Der Barebone-Code ist hier (falls es darauf ankommt):

import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.oauth.*;

public class FacebookProg {
    public static void main (String args[]) {
        OAuthService service = new ServiceBuilder()
        .provider(FacebookApi.class)
        .apiKey("blah_blah")
        .apiSecret("blah_blah")
        .build();
    }
}
War es hilfreich?

Lösung

Der Klassenpfad muss sowohl auf das Verzeichnis der externen Bibliothek zeigen, die Sie verwenden, und die Klasse, die Sie versuchen, sich selbst auszurennen.Versuchen Sie dies:

Windows: generasacodicetagpre.

linux: generasacodicetagpre.

Übrigens, um es zu kompilieren, sollten Sie dies ausführen: generasacodicetagpre.

Andere Tipps

Angenommen, das Verzeichnis Ihres Programms ist

$ home

$ home / lib / *. Jar

Sie können ein Skript wie: schreiben generasacodicetagpre.

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg

Dies sollte gut funktionieren, wenn Sie das FacebookProg kompiliert haben.klasse im selben Verzeichnis.Du kannst es versuchen java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg

Dieser

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg 

bedeutet, dass Sie das ausführen FacebookProg klasse, nicht kompilieren.

Wenn Sie das verlassen -cp ... out, Sie lassen den wichtigen Klassenpfad aus, sodass die JVM die Klassen nicht finden kann FacebookProg benötigt.

Zum Kompilieren benötigen Sie

javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java 

(beachten Sie die javac, statt java um den Compiler aufzurufen)

Um zu rennen, wissen Sie bereits, wie es geht.

Außerdem haben Sie Fehler in den folgenden Zeilen:

export CLASSPATH="/usr/share/java"; java FacebookProf     
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg

Die ersten Rechtschreibfehler FacebookProg und hat nicht das erforderliche Glas im Klassenpfad, das zweite hat den falschen Pfad zum Glas.Versuchen

export CLASSPATH="/usr/share/java/scribe-1.3.0.jar"; java FacebookProg     

Stellen Sie außerdem sicher, dass sich das Glas tatsächlich in befindet /usr/share/java/scribe-1.3.0.jar

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top