由java.lang.NoClassDefFoundError引起:

时间:2011-11-25 06:19:42

标签: 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());
        }
      }
    }

当我跑步时,我正在

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.

3 个答案:

答案 0 :(得分:5)

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

您当前目录下可能有一个com目录,该目录中有一个Caller.class文件。如果情况并非如此,您需要弄清楚您是如何编译代码并进行修复的。

我的猜测就是你刚刚开始运行:

javac Caller.java
java com.Caller

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

javac -d . Caller.java
java com.Caller

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

mkdir com
move Caller.java com
javac com\Caller.java
java com.Caller

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

mkdir src\com
move Caller.java src\com
javac -d bin src\com\Caller.java
java -cp bin com.Caller

答案 1 :(得分:-1)

运行.class命令时,必须确保将java文件的位置添加到类路径中(以便执行可以找到已编译的类)。

所以,转到com目录,然后使用:

java -cp . Caller

答案 2 :(得分:-1)

这意味着该类不存在。请。尝试再次构建项目并将其部署在Web服务器中。