Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.VerifyError:(类:ea/Individual,方法:<;init>;signature:(I)V)构造函数必须调用super()或this()_Java_Netbeans - Fatal编程技术网

java.lang.VerifyError:(类:ea/Individual,方法:<;init>;signature:(I)V)构造函数必须调用super()或this()

java.lang.VerifyError:(类:ea/Individual,方法:<;init>;signature:(I)V)构造函数必须调用super()或this(),java,netbeans,Java,Netbeans,我在这个类中没有发现任何错误,但Netbeans在那个类上不断显示红色符号。班级是 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ea; /** * * @author riyad */ import java.util.Random; import java.util.BitSet; public class In

我在这个类中没有发现任何错误,但Netbeans在那个类上不断显示红色符号。班级是

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ea;

/**
 *
 * @author riyad
 */

import java.util.Random;
import java.util.BitSet;

public class Individual 
{
    BitSet variable;

    double x;
    double fitness;
    double sharedFitness;
    final int SIZE;


    Random generator = new Random();

    public Individual(int SIZE)
    {
        this.variable = new BitSet(SIZE);
        this.fitness = 0;
        this.sharedFitness = 0;
        this.SIZE = SIZE;


        for(int i=0; i<SIZE; i++)
        {
            if(generator.nextBoolean())
            {
                variable.set(i);
            }
            else
            {
                variable.clear(i);
            }
        }

        x = Double.parseDouble(variable.toString());
    }


    public Individual copy()
    {
        Individual ind = new Individual(SIZE);

        this.variable = (BitSet) ind.variable.clone();
        this.fitness = ind.fitness;
        this.sharedFitness = ind.sharedFitness;
        this.x = ind.x;

        return ind;
    }

    public void evaluate()
    {
        fitness = x * Math.sin(Math.sqrt(x));
    }

    public boolean getBit(int i)
    {
        return variable.get(i);
    }

    public BitSet getBitSet()
    {
        return variable;
    }

    public void setBit(int i)
    {
        variable.set(i);
    }

    public void clearBit(int i)
    {
        variable.clear(i);
    }

    public double getFitness()
    {
        return fitness;
    }

    public double sharedFitness()
    {
        return sharedFitness;
    }

    public void setSharedFitness(double fitness)
    {
        this.sharedFitness = fitness;
    }

    public void setFitness(double fitness)
    {
        this.fitness = fitness;
    }
}
编辑

我没有手动重命名该文件。所有的编码都是在Netbeans中完成的。唯一的问题是当我创建个人的实例时

EDIT2


我已将项目复制到另一个地方,一切又恢复正常。可能是Netbeans或JDK的错误这可能不是问题所在,但您的
copy()
方法完全是一团糟。。。它实际上只是重置原始对象,并返回一个新的空对象,而不是复制任何内容。如果希望它创建对象的副本,则应执行以下操作:

public Individual copy()
{
    Individual ind = new Individual(SIZE);

    ind.variable = (BitSet) this.variable.clone();
    ind.fitness = this.fitness;
    ind.sharedFitness = this.sharedFitness;
    ind.x = this.x;

    return ind;
}
Individual newOne = oldOne.copy();
然后这样称呼它:

public Individual copy()
{
    Individual ind = new Individual(SIZE);

    ind.variable = (BitSet) this.variable.clone();
    ind.fitness = this.fitness;
    ind.sharedFitness = this.sharedFitness;
    ind.x = this.x;

    return ind;
}
Individual newOne = oldOne.copy();

您应该
javap
检查.class文件,并检查编译器是否在构造函数的开头附近生成了对super()的调用

JVM验证器要求任何构造函数(当然对象除外)调用(可能通过另一个构造函数间接调用)它的超类的构造函数。通常,如果您不这样做,编译器会自动插入对超类构造函数的调用,但在某些情况下,它可能会被混淆为不这样做(尽管给出的代码似乎没有那么复杂)


(是的,您在
copy
中的大多数地方都交换了
this
ind

嗨,我对NetBeans也有同样的经验。我很生气,但解决办法很简单。
您必须复制并创建新项目以及与非功能项目中相同的类。然后将旧项目中的类中的所有文本复制到新项目中,如果包名不同,不要忘记更改包名。然后您的工作将运行:)

我在Netbeans中遇到了同样的问题。清理并再次构建项目为我解决了这个问题。

例如,当我试图运行针对Xerces 1编译的程序时,发生了这种情况,但在类路径上发现了Xerces 2。在运行时找到了所需的类(在org.apache.*命名空间中),因此结果不是ClassNotFoundException。类和方法发生了更改,因此在运行时找到的方法签名与编译时的签名不匹配


通常,编译器将标记方法签名不匹配的问题。加载类时,JVM将再次验证字节码,并在字节码尝试执行不允许的操作时抛出VerifyError——例如,调用返回字符串的方法,然后将返回值存储在包含列表的字段中。这是我得到的,但我仍然无法更正它。

当前代码似乎正确,问题可能在于使用个人类。你是如何创建它的实例的?@stacker:我一点也不懂。我是e Newbie当我用这个类创建一个项目时,我在Eclipse中没有看到任何错误。当在不同的包中有相同签名的重复类时,这似乎是一个Netbeans特有的怪癖:可能是您通过file explorer手动重命名了旧类,而不是使用IDE重构函数。清理您的项目。很高兴能提供帮助,但如果这解决了您的问题,这是偶然的:P检查热舔答案以获得更好的解释。
Individual newOne = oldOne.copy();