Java 爪哇语;ClassNotFoundException“;错误

Java 爪哇语;ClassNotFoundException“;错误,java,classpath,classnotfoundexception,scribe,Java,Classpath,Classnotfoundexception,Scribe,我是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

我是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新手,所以可能有一个简单的解决方案,但我找不到。我在Ubuntu 11.04上使用Sun Java 1.6 64位。scribe-1.3.0.jar文件位于“/usr/share/java”中,我认为它是放置java包的标准位置

以下是赤裸裸的代码(如有必要):

这个

表示您正在运行
FacebookProg
类,而不是编译它

如果您将
-cp…
保留在外,那么您将保留重要的类路径,因此JVM无法找到
FacebookProg
所需的类

要编译,您需要

javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java 
(注意调用编译器的是
javac
,而不是
java

要跑,你已经知道怎么跑了

此外,以下行中也有错误:

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     

另外,确保jar确实位于
/usr/share/java/scribe-1.3.0.jar

假设程序的目录是

$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

如果您在同一目录中编译FacebookProg.class,这应该可以正常工作。您可以尝试
java-cp/usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class目录/FacebookProg

类路径必须同时指向您正在使用的外部库的目录和您试图运行自身的类。试试这个:

窗口:

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

是的,这对我有用。虽然“usr/”前面应该有一个开始斜杠。这里:java-cp.:/usr/share/java/scribe-1.3.0.jar facebookprog不客气。我可以从程序员的角度告诉你,通过经验学习远比从书本和教程中获得的知识更有价值。我很高兴它今天开始使用。至于usr之前的斜杠,我不太熟悉linux目录结构,所以对此我很抱歉。
java -cp .;/usr/share/java/scribe-1.3.0.jar FacebookProg
java -cp .:/usr/share/java/scribe-1.3.0.jar FacebookProg
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg