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

尝试执行java.lang.NoClassDefFoundError时获取java.lang.NoClassDefFoundError,java,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

我在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
如果我取消注释helloworld行并注释下一行,程序运行正常

我正在使用安装在
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
jar是一个第三方归档文件,我需要创建一个小程序来公开一个方法,这样我就可以用javascript调用它。我不是一个java开发人员,我遇到了一些小麻烦,我真的要结束了

我尝试了其他选择,如:

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

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

要执行依赖于外部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

您是否尝试过
java-cp jPrint.jar MainJPrint
?类参数通常放在最后。
java-cp-jPring.jar MainJPrint
应该可以工作。您能提供整个
MainJPrint.java
内容吗?为什么您仍然使用j2sdk1.4.2?@TimBüThe,第三方公司建议使用此版本创建小程序。我收到错误:无法找到或加载主类MainJPrintMainJPrint是我的类,不在jar中,该jar是第三方jar您确定您正在包含
jPrint.jar
和编译的
MainJPrint.class
文件的文件夹中执行该确切命令吗?您可以尝试颠倒类路径的顺序:
java-cp.:jPrint.jar MainJPrint
,以防出现一些奇怪的情况……这是意外的行为,我刚刚能够在几个平台上用几个java版本验证我的建议的准确性。为了全面起见,您是否可以编辑您的问题,将以下每个命令的输出按顺序执行(假设您在Windows上基于>提示):
dir
javac-cp jPrint.jar MainJPrint.java
dir
java-cp。MainJPrint
java-cp jPrint.jar:。MainJPrint
。如果您可以编辑
MainJPrint
作为一个简单的示例,而不是摘录,并发布其完整的代码,这也会很有帮助。啊,如果您在Windows上,那么您实际上应该用分号而不是冒号分隔条目:
java-cp jPrint.jar;。MainJPrint
。我用Windows已经很多年了,我完全忘记了。