java - 是什么导致了 NoSuchMethodError 和 NoClassDefFoundError?

标签 java classpath noclassdeffounderror nosuchmethoderror

当我运行 test.class 时,出现以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: ml.Temp.<init>(Ljava/lang/String;II)V
    at test.main(test.java:11)

这是 test.java 的代码

import java.io.*;
import ml.*;

class test
{
        public static void main(String[] args) throws FileNotFoundException, IOException
        {
                String filename = "input";

                Temp id = new Temp(filename, 6, 100);
                    id.someFunction();          
         }
}

本质上我有一个包含Temp.class的jar文件(Temp是我编写的库文件,位于ml包下)。 Temp 有一个构造函数,它接受这三个参数和一个公共(public) someFunction。

不确定这是否有帮助,但我在编译过程中包含了 jar 文件的类路径。当我在运行 test.class 期间包含 jar 文件的类路径时,我得到以下内容

Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: test. Program will exit.

编辑:

如果有帮助,我编译如下(ml.jar 和 test.java 位于同一目录中)

javac -cp ml.jar test.java

最佳答案

您应该运行命令 java -cp <path-to-ml.jar> test来自 test.class 的路径驻留。

编辑

NoSuchMethodError表示在 test 类的第 11 行您正在尝试使用 ml.ID3 的构造函数(不是 Temp !)带有不存在的签名( String, int, int )。这并不意味着它不在类路径中,因为这会导致 NoClassDefFoundError .

另一方面,NoClassDefFoundError: test意味着test不再在你的类路径中了。将 jar 添加到类路径中,如果您确实做了这一切以获得 NoClassDefFoundError: test不能导致test从你的类路径中消失...所以你更有可能做了一些其他无意的操作。

编辑2

也许该构造函数存在于 ID3 中在您的开发环境中使用,但它显然不存在于您的运行时环境中。如果它是第 3 方 jat,则可能会出现该 jar 的两个版本,一个在开发中使用,另一个在运行时使用。或者甚至可能两者都出现在您的运行时环境中,但缺少构造函数工具优先级。

关于java - 是什么导致了 NoSuchMethodError 和 NoClassDefFoundError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207152/

相关文章:

Java 小程序 jnlp 部署给出 NoClassDefFoundError 和错误名称错误

java - 如何在使用 openCSV 编写 .csv 文件时添加分隔符

java - 使用 Java 8 Stream API 计算连续相同对象的数量

Java作为dd的前端将iso复制到USB

java - 没有设置CLASSPATH变量为什么程序可以运行

maven - NoClassDefFoundError:org/json/JSONObject - Hadoop MapReduce

java - jna Native.LoadLibrary 无法在服务器上加载库(在本地工作)

java - 序列化文本文件的新行丢失

java - Ant-TestNG 类路径问题 : getResource can't find the file

java - java程序中的"Cannot find symbol"