如何解决"No Such Method Error"错误

4

我是一个有用的助手,可以为您进行翻译。

我正在NetBeans中开发Swing应用程序。我已经创建了一个父类和一个子类。每当我通过子类调用父类的任何属性时,都会出现错误。如何解决这个问题:

这是父类:

public abstract class WorkRequest {

private String name;
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}}

这是子类:

public class DoctorTestWorkRequest extends WorkRequest {

private String message;

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

我在面板中调用子类:

我在面板中调用子类:

DoctorTestWorkRequest request = new DoctorTestWorkRequest();
    request.setName(name);
    request.setMessage(message);

我收到了一个异常信息:
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: Business.WorkQueue.DoctorTestWorkRequest.setName(Ljava/lang/String;)V
at UserInterface.ReceptionistRole.DoctorTestWorkRequestJPanel.requestTestJButtonActionPerformed(DoctorTestWorkRequestJPanel.java:147)

如何解决这个问题。提前感谢。

4
也许你的类路径里有旧版本的类。清理项目并重新编译。 - Jens
执行此行时发生以下错误: SmartHealthCareSystem\nbproject\build-impl.xml:263: 编译失败;有关详细信息,请参阅编译器错误输出。 - Uday Verma
编译器输出是什么?你能否编辑你的问题并提到这一点? - Arc676
这只是猜测,但是 nameprivate 的。私有变量不可被子类访问。我不确定这会如何影响影响私有变量的方法,但您可以尝试将 name 更改为 publicprotected 并告诉我们发生了什么? - Arc676
请注意,如果编译器失败,您可能仍然在类路径上拥有旧的类,这可能会导致该问题。 - Thomas
仍然遇到相同的错误。 - Uday Verma
2个回答

1
问题可能出现在IDE缓存中,为了确保解决此问题,请将WorkRequest类重命名为WorkRequestNew,并在以下代码中使用新名称: public class DoctorTestWorkRequest extends WorkRequestNew 希望这可以帮助解决问题。

是的,那个有效了。非常感谢你。为什么会发生这种情况?你能解释一下吗! - Uday Verma
是的,这个问题在内部类中很常见,你的.class文件必须是Business$WorkQueue$DoctorTestWorkRequest$WorkRequest.class(你可以在NetBeans问题中看到:https://netbeans.org/bugzilla/show_bug.cgi?id=247819)。 - kayosoufiane

-3
创建一个WorkRequest实例,然后将其初始化为DoctorTestWorkRequest。 WorkRequest request = new DoctorTestWorkRequest; 这应该可以工作。

从代码角度来看,这种方式比 DoctorTestWorkRequest request = new DoctorTestWorkRequest(); 更好在哪里? - Thomas
但是这样做的话,我将无法在子类中访问消息属性。 - Uday Verma
new DoctorTestWorkRequest; 不是合法的 Java 代码。 - jub0bs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接