2013-09-24 24 views
-1

我無法在linux/ubuntu中運行我的java程序。
我一直在這個問題上工作了一整天,似乎無法找到任何解決方案。 我在Windows 7機器上使用Eclipse編寫了一個小型java程序,它工作得很好。這裏是我的代碼:NoClassDefFoundError在linux/ubuntu中運行java程序時

//start of java program jsonReader 
package jsonReader; 
//imports needed to run program 
import java.io.FileNotFoundException; 
import org.codehaus.jackson.map.*; 
import org.codehaus.jackson.*; 

爲了使進口org.codehause.jackson ..上班,我在我的項目包括手動這個jar文件:傑克遜 - 全1.9.11.jar

//class jsonReader 
    public class jsonReader { 
    //start of main 
      public static void main (String[] args) throws FileNotFoundException { 

其餘的這是我的程序,它工作得很好。

我的項目的下一步是在Ubuntu上運行它 - 命令行。我做了導出月食: 文件 - >導出 - >常規 - >存檔文件 - >並創建了一個Zip文件。

這個zip文件被轉移到我的linux/ubuntu環境。從那裏,我解壓縮文件。這是目錄結構:

在主目錄中,我有:

/jsonReader --> has the following directories in it: 
       -/bin/jsonReader/jsonReader.class 
       -/lib/jackson-all-1.9.11.jar 
       -/src/jsonReader/jsonReader.java 
       -.classpath (file); and a few other files. 

在/ jsonReader/src目錄/ jsonReader我運行此命令:javac的jsonReader.java - >我得到這個錯誤:

jsonReader.java:6: package org.codehaus.jackson.map does not exist 
    import org.codehaus.jackson.map.*; 
    ^
    jsonReader.java:7: package org.codehaus.jackson does not exist 
    import org.codehaus.jackson.*; 
    ^

然後我運行此命令:

javac -classpath /jsonReader/lib/jackson-all-1.9.11.jar jsonReader.java 

我沒有得到任何錯誤。該命令在/ src/jsonReader目錄中創建一個jsonReader.class文件。我嘗試使用這個命令來運行該文件:

java jsonReader 

我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: jsonReader (wrong name: jsonReader/jsonReader) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: jsonReader. Program will exit. 

這是我得到的命令行中運行這個當整個錯誤消息。

我不知道爲什麼我得到這個錯誤以及如何解決它。

回答

0

您必須運行程序,像這樣

java -cp /jsonReader/lib/jackson-all-1.9.11.jar jsonReader.jsonReader 

假設傑克遜罐子是/jsonReader/lib

您需要使用要運行其main方法的類的全限定類名。


一個例子,所以它可以工作。

創建的結構如下

/project 
    /src 
     /jsonReaderTemp 
      /jsonReader.java 
    /bin 
     /jsonReaderTemp 
      /jsonReader.class 
    /lib 
     /jackson-all-1.9.11.jar 

您可以手動創建它,或者使用命令行來做到這一點,取決於你。

通過以上,cdproject和運行

java -cp lib/jackson-all-1.9.11.jar;bin jsonReaderTemp.jsonReader 

注意;作爲CLASSPATH目錄的分隔符。


需要注意的是Java約定指出,類名應以大寫字母開始,所以JsonReader和包名應該全部小寫,分離與.的話,如果你需要(但不應該有這樣的話)。

+0

你好,我試着運行那個命令,但它仍然沒有工作。我從/ jsonReader/src/jsonReader(那裏有一個.class文件)運行它並且我也從/ jsonReader/src目錄運行它。兩人都給了我同樣的錯誤.. NoClassDefFound。 – user2809181

+0

@ user2809181如果'jsonReader.class'在'src/jsonReader'中,即。 'src/jsonReader/jsonReader.class',你應該從'src'運行它。 –

+0

我仍然從src得到相同的錯誤。 =( – user2809181

相關問題