在运行时获取NoSuchMethodError

时间:2014-03-05 10:39:53

标签: java netbeans runtime-error nosuchmethoderror

我已经查看了类似问题的许多答案。但无法缩小解决方案。

以下是代码:(简化名称以便于阅读)

头等舱:

package p1;

public class C1 {
    public static void test() {
        System.out.println("Boom!");    
    }
}

第二课:

package p2;
import p1;

public class C2 {
    public static void main(String[] params) {
        C1.test();    
    }
}

Clean-Build不会出现任何错误。 (没有编译错误)

但是在运行时我遇到了以下错误:

Exception in thread "main" java.lang.NoSuchMethodError: C1.test()V
at C2.main(C2.java:6)
  Java Result: 1

P.S。我正在使用Netbeans。

5 个答案:

答案 0 :(得分:4)

这意味着您在类路径中使用旧版本的C2运行您的类C1(一个尚未使用test()方法的版本)。

确保您某处没有C1.class的旧版本。删除所有*.class文件并重新编译所有文件,然后尝试再次运行它。

另外:正如Kevin Bowersox在评论中指出的那样,您的main方法必须如下所示:

public static void main(String[] args)

必须String[]作为参数。

答案 1 :(得分:0)

只有当main函数将String选项卡作为args时,它才能正确编译和运行。 但是还要检查类C1和C2的版本,尝试重建项目以重新编译这些类。

public static void main(String args[]) {
        C1.test();
    }

答案 2 :(得分:0)

我认为您应该将其导入为 import p1。*;

您将可以访问其中的所有类和成员函数。

答案 3 :(得分:0)

Netbeans有时喜欢在发生一些变化后陷入困境,然后干净的构建不起作用。

尝试编辑最近修改过的每个文件并再次保存(例如,将空格放在随机位置)。之后,再次清理并构建项目。

答案 4 :(得分:-1)

如果我的内存刷新并且正如Jesper指出的那样,我在同一场景下也遇到了同样的问题NoSuchMethodFoundException(还有尚未清理的旧类引用)。

我刚刚将带有2个不同软件包的代码片段直接复制到我的netbean,编译和运行的C2中。它打印了BOOM!消息。

在我的案例中使用:

public static void main(String args[]){
}
编译和运行代码时,

没有什么区别。

public static void main(String params[]){
}

这是有道理的,因为主类应该具有正确的main方法签名。

在这里,args或params,不应该产生巨大的变化,我相信;正如我们在方法中所拥有的只是它所使用的方法的内部主体的引用。

仍然绝对遵循main的标准签名是好的做法。

我建议清理项目并在新项目中从头开始复制内容并重新构建,有时netbeans会发疯。