2012-05-04 44 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

相关问题