简体   繁体   中英

Getting java.lang.NoClassDefFoundError when trying the execute a java.class

I created the following class located in the MainJPrint.java file

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()
            {
                 ...
            }
         }
    }
}

In the same folder I have a jar archive jPrint.jar I compile the class using the following command

>javac -classpath jPrint.jar MainJPrint.java

When I'm trying to execute resulted class file, I get this error:

>java MainJPrint    

 java.lang.NoClassDefFoundError: com/XXXXX/pdfPrint/PDFPrint

If I uncomment the Hello World line and comment the next line, the program runs fine.

I'm using j2sdk1.4.2 installed at C:\\j2sdk1.4.2 . I do also have installed other java versions (at C:\\Program Files\\Java: jre 1.6.0_01, jre 1.6.0_02, j2re1.4.2, jre6, jre7, jdk1.7.0_03)

The PATH variable contains the C:\\j2sdk1.4.2\\bin path, however I think the java.exe is loaded from the upper version, but it shouldn't matter and I can call it like

>C:\j2sdk1.4.2\bin\java.exe MainJPrint

jPrint.jar is a third party archive and I need to create an applet which exposes a method so I can call it with javascript. I'm not a java developer, I'm having some little troubles and I'm really on an end here.

I tried other options like:

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

So how can I execute that class file which uses a class located in a separate archive?

To execute a class that depends on external JARs, you need to specify all elements of the classpath on the command line.

If you don't specify a classpath, Java automatically uses . (the current directory), which is why, if MainJPrint didn't depend on jPrint.jar, your invocation java MainJPrint would have worked.

But when you specify -cp jPrint.jar , Java does NOT automatically add the current directory to the classpath, which means that it then cannot find MainJPrint. You need to specify both. On Mac/*nix, the following invocation should work:

java -cp jPrint.jar:. MainJPrint

Or on Windows:

java -cp jPrint.jar;. MainJPrint

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM