java-Fehler "ClassNotFoundException"
-
11-12-2019 - |
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();
}
}
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