2012-05-19 54 views
2

我是java程序设计新手,我收到了大量错误的错误“ClassNotFoundException”错误。java“ClassNotFoundException”错误

奇怪的是,是,它编译罚款:

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

但是当我尝试运行它,我得到以下错误:

[email protected]:~/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和谷歌,仍然不知道为什么。我是新来的java,所以可能有一个简单的解决方案,但我找不到它。我在Ubuntu 11.04上使用Sun Java 1.6 64位。 scribe-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(); 
    } 
} 

回答

7

classpath必须指向你正在使用的外部库的目录以及你正在尝试运行的类。试试这个:

的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 
+0

是的,这个工作对我来说。虽然在“usr /”之前应该有一个开始斜杠标记。这里:java -cp。:/ usr/share/java/scribe-1.3.0.jar FacebookProg –

+0

不客气。我可以从程序员的眼中告诉你,通过经验学习比从书籍和教程中获得的知识更有价值。我很高兴今天能够使用它。 至于usr之前的斜线,以及我不熟悉linux目录结构,所以我很抱歉。 – EnKrypt

0

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,第二个有错误的路径罐子。尝试

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

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

0

假设,你的程序的目录是

$ 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 
0
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg 

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

相关问题