2012-06-15 14 views
9

में serialVersionUID क्षेत्र चेतावनी मैं सिर्फ AWT पर शुरू कर दिया और उस में एक साधारण प्रोग्राम बना दिया है, यह ठीक काम करता है, लेकिन यह जो मुझे समझ नहीं आता ग्रहण में एक चेतावनी संदेश दिखाता है:ग्रहण

serializable वर्ग TestGUI प्रकार लंबे की एक स्थिर अंतिम serialVersionUID क्षेत्र की घोषणा नहीं करता

मुझे पता है कि चेतावनी संदेश AWT से संबंधित नहीं है और मेरे पूरे कोड पोस्ट करने के लिए कोई जरूरत नहीं थी, लेकिन जब मैं कोड का एक SSCCE करने की कोशिश की चेतावनी भी गायब हो गई। चूंकि मुझे नहीं पता कि यह चेतावनी क्यों उत्पन्न हुई है, मुझे नहीं पता था कि मेरे एसएससीसीई में कौन सा हिस्सा बनाए रखना है। इसलिए पूरा कोड! पहले से

import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

public class TestGUI extends Frame { 
    /** 
    * @param args 
    */ 
    private int x = 50; 
    private int y = 50; 

    TestGUI(String s) { 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent we) { 
       setVisible(false); 
       System.exit(0); 
      } 
     }); 
     addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent me) { 
       x = me.getX(); 
       y = me.getY(); 
       repaint(); 
      } 
     }); 
    } 

    public void paint(Graphics g) { 
     g.drawString("Hello Princess", 100, 100); 
     g.drawString("Mouse clicked here", x, y); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     TestGUI tg = new TestGUI("first"); 
     tg.setSize(500, 500); 
     tg.setVisible(true); 
    } 

} 

Thanx:

मेरे कोड है!

+1

संभावित डुप्लिकेट [एक serialVersionUID क्या है और मुझे इसका उपयोग क्यों करना चाहिए?] (Http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use- यह) –

उत्तर

20

ग्रहण कि डिफ़ॉल्ट रूप से अक्षम चेतावनी के लिए इस्तेमाल किया:

कि जावाडोक का महत्वपूर्ण हिस्सा के शब्दों में। ग्रहण इंडिगो (3.7) में, डिफ़ॉल्ट चेतावनी को सक्षम करना था। आप सेटिंग को 2 स्थानों में बदल सकते हैं, एक वर्कस्पेस में सब कुछ के लिए, और एक एकल प्रोजेक्ट के लिए।

कार्यक्षेत्र में सभी परियोजनाओं के लिए चेतावनी को अक्षम करने के खिड़की/प्राथमिकताएं पर जाएं और जावा/संकलक/"त्रुटियाँ/चेतावनी" टैब खोलें, और खोलने "संभावित प्रोग्रामिंग समस्याओं", फिर "का मूल्य बदल SerialVersionUID के बिना Serializable वर्ग "अनदेखा करने के लिए (या जो भी आप सोचते हैं उचित है)।

एक एकल परियोजना के लिए चेतावनी को अक्षम करने के आप परियोजना पर राइट क्लिक कर सकते, चुनें गुण है, तो जावा संकलक/"त्रुटियाँ/चेतावनी" करने के लिए, जाना परियोजना विशिष्ट सेटिंग सक्षम (यदि आवश्यक हो), तो क्लिक करें "संभावित प्रोग्रामिंग समस्याएं" का चयन करें और अनदेखा करने के लिए "SerialVersionUID के बिना Serializable क्लास" के मान को बदलें (या जो भी आपको लगता है उचित है)।

5

TestGUIFrame बढ़ाता है जो बदले में Serializable लागू करता है। Serializable इंटरफ़ेस की आवश्यकता final long serialVersionUID फ़ील्ड है। अधिक जानकारी के लिए Serializable javadoc देखें।

...it is strongly recommended that all serializable classes explicitly declare 
serialVersionUID values, since the default serialVersionUID computation is highly 
sensitive to class details that may vary depending on compiler implementations... 
+0

लेकिन मैंने अतीत में क्रमबद्धता पर काम किया है और कभी भी ऐसा कोई क्षेत्र घोषित नहीं किया है और अभी भी यह चेतावनी कभी नहीं मिली है। इस बार अलग क्या है? या पहले क्या अलग था? –

+0

भी जावाडोक कहता है: 'यदि एक धारावाहिक वर्ग स्पष्ट रूप से एक धारावाहिक VERSIONUID घोषित नहीं करता है, तो धारावाहिक रनटाइम कक्षा के विभिन्न पहलुओं के आधार पर उस वर्ग के लिए एक डिफ़ॉल्ट धारावाहिक VERSIONUID मान की गणना करेगा, जैसा कि जावा (टीएम) ऑब्जेक्ट सीरियलाइजेशन विशिष्टता में वर्णित है । –

+1

यह संभव है कि ग्रहण ने उस चेतावनी को अक्षम कर दिया हो। – Poindexter