0

我在 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. 我也安装了其他 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 是第三方存档,我需要创建一个公开方法的小程序,以便我可以使用 javascript 调用它。我不是Java开发人员,我遇到了一些小麻烦,而且我真的走到了尽头。

我尝试了其他选项,例如:

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

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

4

1 回答 1

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
于 2012-05-04T12:16:10.310 回答