由java.lang.NoClassDefFoundError引起:

Pav*_*mar 0 java jvm

我有下面这个问题

package com;

    import java.io.PrintStream;
    import java.net.URL;
    import java.net.URLConnection;

    public class Caller
    {
      public static void main(String[] args)
      {
        try
        {
          URL url = new URL("http://localhost:8080/Test/Ravi.jsp");
          connection = url.openConnection();
        }
        catch (Exception ioe)
        {
          URLConnection connection;
          System.err.println("IOException: " + ioe.getMessage());
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

当我跑步时,我正在接受

C:\ Program Files\Apache Software Foundation\apache-tomcat-6.0.33\webapps\Test\WEB-INF\classes> java com.Caller

Exception in thread "main" java.lang.NoClassDefFoundError: com/Caller
Caused by: java.lang.ClassNotFoundException: com.Caller
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.Caller.  Program will exit.
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

你完全不清楚为什么要尝试从Tomcat目录运行一个控制台应用程序,但基本上它找不到你的类.

您应该com在当前目录下有一个目录,并且Caller.class该目录中有一个文件.如果不是这样,您需要弄清楚如何编译代码并修复它.

我的猜测是你刚刚运行:

javac Caller.java
java com.Caller
Run Code Online (Sandbox Code Playgroud)

这将在当前目录中创建类文件.有两种方法可以解决这个问题.你可以使用-d:

javac -d . Caller.java
java com.Caller
Run Code Online (Sandbox Code Playgroud)

或者您可以将源文件移动到反映包结构的结构中,即com自己创建一个目录:

mkdir com
move Caller.java com
javac com\Caller.java
java com.Caller
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,您可以从二进制文件中分离出源:

mkdir src\com
move Caller.java src\com
javac -d bin src\com\Caller.java
java -cp bin com.Caller
Run Code Online (Sandbox Code Playgroud)