2011-12-20 13 views
7

पर कॉल करना होगा मुझे इस कक्षा में कोई त्रुटि नहीं मिल रही है, लेकिन नेटबीन्स लगातार दिखा रहा है उस वर्ग पर लाल प्रतीक। कक्षाjava.lang.VerifyError: (कक्षा: ईए/व्यक्तिगत, विधि: <init> हस्ताक्षर: (i) वी) कन्स्ट्रक्टर को सुपर() या यह()

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

कोड संकलित है लेकिन रनटाइम त्रुटि प्राप्त हो रहा है।

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

अन्य वर्ग है, जहां अलग-अलग वर्ग के लिए इस्तेमाल किया जा रहा है:

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

यह जहां अलग-अलग वर्ग intantiated किया जा रहा है:

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

संपादित

मैं हेवन ' टी मैन्युअल रूप से फ़ाइल का नाम बदल दिया। नेटबीन में सभी कोडिंग किए गए थे। एकमात्र समस्या यह है कि जब मैं व्यक्तिगत का उदाहरण बना रहा हूं।

EDIT2

मैं परियोजना एक अन्य जगह की नकल की है, सब कुछ फिर से सामान्य है। शायद नेटबीन्स या जेडीके

+0

http://stackoverflow.com/questions/100107/reasons-of-getting-a-java-lang-verifyerror – stacker

+6

वर्तमान कोड सही लगता है , समस्या व्यक्तिगत वर्ग के उपयोग में हो सकती है। आप इसका उदाहरण कैसे बनाते हैं? – WoLfulus

+0

@ स्टैकर: थोड़ा सा समझ में नहीं आया। मैं ई नौसिखिया – user

उत्तर

5

आप .class फ़ाइल javap और क्या जाँच करनी चाहिए कंपाइलर ने आपके कन्स्ट्रक्टर की शुरुआत के पास सुपर() को कॉल किया।

जेवीएम सत्यापनकर्ता के लिए आवश्यक है कि किसी भी कन्स्ट्रक्टर (ऑब्जेक्ट के अलावा, निश्चित रूप से) किसी अन्य कन्स्ट्रक्टर के माध्यम से (संभवतः अप्रत्यक्ष रूप से अप्रत्यक्ष रूप से) यह सुपरक्लस का कन्स्ट्रक्टर है। आम तौर पर संकलक सुपरक्लास कन्स्ट्रक्टर को कॉल करता है यदि आप ऐसा नहीं करते हैं, लेकिन यह संभव है कि इसे कुछ परिस्थितियों में ऐसा करने में भ्रमित किया जा सके (हालांकि प्रस्तुत कोड उस जटिल नहीं लगता है)।

(और, हाँ, आप this और indcopy में सबसे अधिक स्थानों में बदली है।)

4

यह शायद समस्या नहीं है, लेकिन आपकी 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(); 
+0

Thnaks! मैंने किया क्या है!!! – user

+0

मदद करने में खुशी हुई, लेकिन अगर यह आपकी समस्या को हल करता है, तो यह मौका है: पी बेहतर व्याख्या के लिए हॉट लिक्स का उत्तर दें। – SuperTron

0

हाय मैं NetBeans के साथ एक ही अनुभव है। मैं इसके बारे में बहुत पागल था, लेकिन समाधान काफी आसान है। आपको नई परियोजनाओं और समान कक्षाओं को समान रूप से कार्यान्वित करने की प्रतिलिपि बनाना है। फिर पुराने प्रोजेक्ट में कक्षाओं से सभी ग्रंथों को नई परियोजना में कॉपी करें और पैकेज नाम बदलने के लिए मत भूलना अगर यह समान नहीं है। आपका काम तब चला जाएगा :)

1

मुझे नेटबीन्स में भी यही समस्या थी। स्वच्छ और फिर परियोजना का निर्माण फिर से मेरे लिए हल किया।

0

java.lang.VerifyError परिणाम हो सकता है जब आप रनटाइम पर उपयोग कर रहे किसी भिन्न पुस्तकालय के विरुद्ध संकलित हो जाते हैं।

उदाहरण के लिए, जेरिस 1 के खिलाफ संकलित एक प्रोग्राम चलाने की कोशिश करते समय यह मेरे साथ हुआ, लेकिन क्लासपाथ पर ज़ेरिस 2 पाया गया। आवश्यक कक्षाएं (org.apache। * नेमस्पेस में) रनटाइम पर पाई गईं, इसलिए ClassNotFoundException परिणाम नहीं था। कक्षाओं और विधियों में बदलाव हुए थे, ताकि रनटाइम पर पाए गए विधि हस्ताक्षर संकलित समय पर मौजूद न हों।

आम तौर पर, संकलक उन समस्याओं को ध्वजांकित करेगा जहां विधि हस्ताक्षर मेल नहीं खाते हैं। जब वर्ग लोड हो जाता है तो JVM बाइटकोड को फिर से सत्यापित करेगा, और VerifyError फेंकता है जब बाइटकोड ऐसा करने की कोशिश कर रहा है जिसे अनुमति नहीं दी जानी चाहिए - उदा। एक विधि को कॉल करना जो स्ट्रिंग देता है और फिर उस सूची में उस वापसी मूल्य को संग्रहीत करता है जिसमें एक सूची होती है। यह मुझे मिला है, लेकिन फिर भी मैं इसे सही करने में असमर्थ हूं ..

संबंधित मुद्दे