当我运行 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/