java"ClassNotFoundException"错误
-
11-12-2019 - |
题
我是java编程的新手,我得到了备受诟病的错误"ClassNotFoundException"错误。
奇怪的是它编译得很好:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
但是当我尝试运行它时,我得到以下错误:
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
我在网上查了一下,似乎java在运行时找不到它在编译时能够找到的库。所以尝试了以下变体:
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
我在StackOverflow和google上查看了几个地方,仍然无法弄清楚为什么。我是java的新手,所以可能有一个简单的解决方案,但我找不到它。我正在Ubuntu11.04上使用Sun Java1.6 64位。抄写员-1.3.0。jar文件在"/usr/share/java"中,我相信它是放置java包的规范位置。
准系统代码在这里(如果它很重要):
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();
}
}
解决方案
类路径必须指向您正在使用的外部库的目录,以及您尝试运行自己的类。尝试:
Windows:
java -cp .;/usr/share/java/scribe-1.3.0.jar FacebookProg
.
linux:
java -cp .:/usr/share/java/scribe-1.3.0.jar FacebookProg
.
顺便说一下,要编译它,您应该运行这个:
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
. 其他提示
假设,程序的目录是
$ home
$ home / lib / *。jar
您可以编写一个脚本:
for file in "$HOME/lib/*.jar"
do
if [ -f $file ]
then
CLASSPATH=$CLASSPATH:$file
else
echo ignore $file
fi
done
java -cp $CLASSPATH FacebookProg
. java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
如果您编译了FacebookProg,这应该可以正常工作。类在同一目录中。你可以试试 java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg
这
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
意味着你正在运行 FacebookProg
类,而不是编译它。
如果你离开 -cp ...
出,你离开了重要的类路径,所以JVM找不到类 FacebookProg
需要。
要编译,您需要
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java
(注意 javac
, ,而不是 java
来调用编译器)
要运行,你已经知道如何。
此外,您在follwoing行中有错误:
export CLASSPATH="/usr/share/java"; java FacebookProf
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
第一个拼写错误 FacebookProg
并且在类路径上没有所需的jar,第二个有错误的jar路径。试试
export CLASSPATH="/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
此外,请确保罐子确实位于 /usr/share/java/scribe-1.3.0.jar