Netbeans中出现“method must call super()”错误

11

我最近制作了一个Netbeans项目,同时使用SVN。在控制台上,我看到了重复类错误:

java.lang.VerifyError: (class: pie/chart/explorer/PieChartExplorer, method: <init> signature: ()V) 构造函数必须调用super()或this()方法
无法找到主类:pie.chart.explorer.PieChartExplorer。程序将退出。
Exception in thread "main" Java Result: 1

这是PieChartExplorer.java的代码:

package pie.chart.explorer;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class PieChartExplorer extends JFrame implements ActionListener {


    JTextField one = new JTextField(10);
     JTextField two = new JTextField(10);
      JTextField three = new JTextField(10);
    JButton sub = new JButton("Click to be amazed");


    public PieChartExplorer() {
        super("Pie Chart Explorer");
        setSize(300,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        FlowLayout flo = new FlowLayout();
        setLayout(flo);
        setVisible(true);
        add(one);
        add(two);
        add(three);
        sub.addActionListener(this);;
        add(sub);

    }

    public static void main(String[] args) {
        PieChartExplorer app = new PieChartExplorer();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if(source == sub) {
            try {
            Pie show = new Pie(Float.parseFloat(one.getText()),Float.parseFloat(two.getText()),Float.parseFloat(three.getText()));
            } catch(Exception ex) {
                JOptionPane.showMessageDialog(this, "Please check entered data");

            }
        }
    }

}

我已经尝试过:

  1. 清理和重新构建项目
  2. 确保我在所有构造函数中都调用了super

如何解决?下载代码


1
@Andrew:你发布的错误看起来像是运行时错误。你有编译错误吗?请发布有关“重复类”错误的详细信息。 - Gabe
你是否导入了包含 Pie 类的包?在注释掉 actionPerformed 方法后(因为 Pie 类),你的代码已经成功地使用 javac-1.6.0_13 编译。 - Emre Yazici
@eyazici 在我开始使用svn之前,所有的都运行良好。 - Andrew delgadillo
2
我下载的你的代码很好。我想知道你是否在其他地方有多个版本的类文件或其他源代码问题。我自己使用 SVN,所以我不确定如何归咎于它,如果使用正确,也不能这样做。 - Hovercraft Full Of Eels
1
你的类文件是否在SVN控制下?如果是的话,它们很容易被复制。只有源代码文件应该在SVN控制下。我知道在NetBeans中有几个控制项目属性的文件,也许其中一个包含错误。那么,尝试将你的内容导入到一个新项目中如何? - adamjmarkham
显示剩余4条评论
5个回答

12

我发现重命名包并没有生效,旧的包仍然存在。

对我而言,问题始于我将另一个应用程序的一个包复制到当前应用程序中,并且已经有了一个同名的包。我试图向该包添加一些缺失的类。在我这样做之后,错误就出现了。

为了解决这个问题,我从目标Web应用程序中删除了整个包,并执行了清理和构建操作。然后我将源包复制到目标应用程序中。没有错误了。


11

我前几天看到了这些症状。

我有一个正在编辑的文件。我想把我的更改分成两个提交。我进入包含文件“x/y/Z.java”的目录,创建了一个名为“backup”的目录,并将“Z.java”移动到那里。然后重新从版本控制中拉取了一个全新的副本。 请注意,所有这些操作都是在IDE之外完成的。

回到IDE中,我合并了第一个提交的更改。但是当我构建时,出现了关于“Z.java”的重复类消息。

因为我在IDE之外将源代码复制到了“backup”中,所以它仍然具有原始包“x.y”,就像我新编辑的“Z.java”一样。因此NB并不能编译新的“Z.java”,因为它可以看到已经创建了“x.y.Z.class”(来自“x/y/backup/Z.java”)。

解决这个问题有两种方法:

  1. 将“x/y/backup/Z.java”重命名为“x/y/backup/Z.java.backup”。(避免备份副本被编译。)
  2. 在“x/y/backup/Z.java”中更改包名为“x.y.backup”。 (使备份创建不同的类文件。)

进行任何一种更改后,请执行“清理并构建”。 注意:只是简单地构建代码不会解决问题,您需要进行清理以删除不受控制的类文件。

注意: #1 是通过在命令行中重命名Z.java完成的,而不是在NB中。 NB不会让您更改文件扩展名。


我可以确认(截至2012年1月16日)这个解决方案不起作用(如果曾经起过作用),但downeyt的答案为我解决了这个问题。 - Dark Star1
1
我可以确认(截至2013年10月7日),此解决方案完美运行。 - manix
完美!是的,这个神秘的错误消息与这些重复的类有关。在我的情况下,我删除了备份,一切都正常了! - Alejadro Xalabarder

2
清理和构建解决问题。

1
如果您仍然遇到问题,这是我解决它的方法。
在我的情况下,我稍后更改了具有主要方法的类,并且初始类仍在属性文件中被引用。
更改该设置,清理并构建。对我有效...

0
在我的情况下,在将POJO进行外部复制并在NETBEANS之外手动编辑后,我在Web应用程序中遇到了同样的问题。实际上,问题就是其他答案中所建议的已编译的.class文件中的冲突。
为了克服这个问题,我所做的就是简单地删除文件夹webAppname/WEB-INF/classes(已编译类所在的位置),然后执行“清理和构建”。
希望这能帮助到某些人。

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