在尝试执行java.class时获取java.lang.NoClassDefFoundError

时间:2012-05-04 11:58:14

标签: java

我创建了位于MainJPrint.java文件中的以下类

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行并注释下一行,则程序运行正常。

我正在使用C:\j2sdk1.4.2安装的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

那么如何执行使用位于单独存档中的类的类文件?

1 个答案:

答案 0 :(得分: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
相关问题