java - 由java.lang.NoClassDefFoundError :引起

标签 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.

最佳答案

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

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

我的猜测是你刚刚运行:

javac Caller.java
java com.Caller

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

javac -d . Caller.java
java com.Caller

或者您可以将源文件移动到反射(reflect)包结构的结构中,即自己创建一个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

关于java - 由java.lang.NoClassDefFoundError :引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8265419/

相关文章:

java - java 中的 MySQL 语句,其中 where 子句使用表名引用列

java - 接受托管授权网络集成问题。付款后没有重定向到我的本地主机

java - 使用 Java 进行语音采样

java - 使用适用于 Java 的 Azure File Data Lake 客户端库检查文件系统是否存在

java - "empty statements"可能会(不会)抛出哪些 Java 错误和异常?

java - 调用 native 代码时 JVM 会停止吗?

java - 创建 Java 服务或守护程序脚本的最佳实践

java - 什么是 Java 7 中的分层编译?

java - 如何禁用 sun jvm 的内联优化?

java - 我如何在 Java 的不同类中使用相同的对象