Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.VerifyError: (class: ea/Individual, method: <init> signature: (I)V) Constructor must call super() or this()

Tags:

java

netbeans

I am not finding any error in this class, but Netbeans continuously showing red symbol on that class. Class is

/*
 * 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;
    }
}

The code is compiling but getting runtime error.

Exception in thread "main" java.lang.VerifyError: (class: ea/Individual, method: <init> signature: (I)V) Constructor must call super() or this()

In another class, where Individual class is being used:

ArrayList<Individual> pop = new ArrayList<Individual>();

This where Individual class is being intantiated:

Individual temp = new Individual(STRING_SIZE);
pop.add(temp);

EDIT

I haven't renamed the file manually. All the coding was done in Netbeans. The only problem is when I am creating instance of Individual.

EDIT2

I have copied the project another place, everything is normal again. probably a bug of Netbeans or JDK

like image 537
user Avatar asked Dec 20 '11 17:12

user


3 Answers

You should javap the .class file and check whether the compiler generated a call to super() near the start of your constructor.

The JVM verifier requires that any constructor (other than for Object, of course) invoke (possibly indirectly via another constructor) it's superclass's constructor. Normally the compiler inserts a call to the superclass constructor automatically if you don't do it, but it's possible that it could be confused into not doing this under some circumstances (though the code presented doesn't seem that complex).

(And, yes, you have this and ind swapped in most places in copy.)

like image 112
Hot Licks Avatar answered Nov 03 '22 02:11

Hot Licks


This is probably not the problem, but your copy() method is totally messed up... Instead of copying anything, it actually just resets the original object, and returns a new empty one. If you wanted it to create copies of the object, you should do something like this:

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;
}

and then call it like this:

Individual newOne = oldOne.copy();
like image 42
SuperTron Avatar answered Nov 03 '22 02:11

SuperTron


I had the same problem in Netbeans. Clean and then Build the project again solved it for me.

like image 45
Cornelia Avatar answered Nov 03 '22 00:11

Cornelia