Java 在运行时获取NoSuchMethodError

Java 在运行时获取NoSuchMethodError,java,netbeans,runtime-error,nosuchmethoderror,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[] param

我已经看过许多类似问题的答案。但无法缩小范围找到解决方案

下面是代码:(简化名称以提高可读性)

头等舱:

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();    
    }
}
二等舱:

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();    
    }
}
干净的构建不会给出任何错误。(无编译错误)

但在运行时,我得到以下错误:

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

另外,我正在使用Netbeans。

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

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

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

public static void main(String[] args)

必须
字符串[]
作为参数。

只有当主函数将字符串选项卡作为参数时,它才能正确编译和运行。 但也要检查C1类和C2类的版本,尝试重建项目以重新编译这些类

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

我认为你应该把它作为一种商品进口 进口p1.*


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

Netbeans有时喜欢在一些更改后陷入困境,而干净的构建无法工作


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

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

我刚刚用两个不同的包将您的代码片段直接复制到我的netbean中,并编译和运行C2。它确实打印了繁荣!信息

就我而言,使用:

public static void main(String args[]){
}
在编译和运行代码时没有任何区别

public static void main(String params[]){
}
这是有意义的,因为main类应该具有main的正确方法签名

我相信,在这里,args或params不应该有很大的区别;因为我们在方法内部拥有的只是它所使用的方法的内部主体的参考

当然,遵循main的标准签名是一种很好的做法


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

C1.test()V
-这看起来可疑。
V
main方法的正确签名是:
公共静态void main(String[]args)
@marounnaroun这只是Java对返回
void
的方法的内部表示法。我在发布问题时错过了参数。很抱歉在问题中更正。错误并不是因为这个原因造成的。@StephenC我想这就是问题所在……而且
main
签名无效。尝试了这个。不工作。此外,clean build本身也会删除所有的.class文件,对吗?这确实是导致出现此类错误的唯一原因。再次检查项目是如何设置的,以及class
C2
引用class
C1
的位置。某些设置方式使它们不同步。