2012-05-04 65 views
0

我創建地處MainJPrint.java文件獲取java.lang.NoClassDefFoundError嘗試時執行的java.class

import com.XXXXX.pdfPrint.PDFPrint; 

public class MainJPrint 
{ 
    public static void main(String[] args) 
    { 
     //System.out.println("Hello World!"); 
     print("....."); 
    } 
    public static String print (final String url) 
    { 
     Object rc = AccessController.doPrivileged(new java.security.PrivilegedAction() 
     { 
      public Object run() 
      { 
       ... 
      } 
     } 
    } 
} 

以下類在同一個文件夾中我有一個JAR檔案jPrint.jar 我使用下面的命令

>javac -classpath jPrint.jar MainJPrint.java 

當我試圖執行導致類文件編譯的類,我得到這個錯誤:

>java MainJPrint  

java.lang.NoClassDefFoundError: com/XXXXX/pdfPrint/PDFPrint 

如果我取消註釋Hello World行並註釋下一行,程序運行良好。

我正在使用j2sdk1.4.2安裝在C:\j2sdk1.4.2。 我也安裝了其他java版本(在C:\ Program Files \ Java:jre 1.6.0_01,jre 1.6.0_02,j2re1.4.2,jre6,jre7,jdk1.7.0_03)

PATH變量包含在C:\j2sdk1.4.2\bin路徑,但我認爲的java.exe從上部版本加載,但它不應該的問題,我可以把它像

>C:\j2sdk1.4.2\bin\java.exe MainJPrint 

jPrint.jar是第三方歸檔和我需要創建一個暴露方法的applet,所以我可以用javascript調用它。我不是一個Java開發人員,我有一些小麻煩,我真的在這裏結束。

我試過其他選項,如:

>java MainJPrint -cp . 
>java MainJPrint -cp jPrint.jar 

所以,我怎麼能執行其使用位於一個獨立的檔案一類的類文件?

+0

你嘗試'java命令jPrint.jar MainJPrint'?類參數通常放在最後。 – adarshr

+0

'java -cp jPring.jar MainJPrint'應該已經工作了。 – maksimov

+0

你能否提供整個'MainJPrint.java'內容? –

回答

1

要執行依賴外部JAR的類,需要在命令行中指定類路徑的所有元素。

如果您沒有指定類路徑,Java會自動使用.(當前目錄),這就是爲什麼,如果MainJPrint不依賴於jPrint.jar,那麼您的調用java MainJPrint已經工作。

但是,當您指定-cp jPrint.jar時,Java不會自動將當前目錄添加到類路徑中,這意味着它無法找到MainJPrint。你需要指定兩者。在Mac/* nix中,下面的調用應該工作:

java -cp jPrint.jar:. MainJPrint 

或Windows:

java -cp jPrint.jar;. MainJPrint 
+0

我收到錯誤:無法找到或加載主類MainJPrint –

+0

MainJPrint是我的類,不在jar中,那個jar是第三方 –

+0

您是否確定要在包含'jPrint.jar' **和**已編譯的'MainJPrint.class'文件的文件夾中執行_exact_命令?你可以嘗試顛倒classpath的順序:'java -cp。:jPrint.jar MainJPrint',以防萬一出現一些怪異情況...... – RTBarnard

相關問題