尝试执行java.lang.NoClassDefFoundError时获取java.lang.NoClassDefFoundError
我在MainJPrint.java文件中创建了以下类尝试执行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
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已经很多年了,我完全忘记了。