我创建了位于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
那么如何执行使用位于单独存档中的类的类文件?
答案 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