2011-12-22 8 views
7

java.lang.UnsupportedClassVersionError क्या है?java.lang.UnsupportedClassVersionError क्या है?

मैं से doc पढ़ें: फेंक दिया जब जावा वर्चुअल मशीन एक वर्ग फ़ाइल को पढ़ने के लिए प्रयास करता है और निर्धारित करता है कि फ़ाइल में बड़ी और छोटी संस्करण संख्याओं समर्थित नहीं हैं, लेकिन नहीं समझ सकता है क्या मतलब है।

फ़ाइल में प्रमुख और मामूली संस्करण क्या हैं?

Exception in thread "main" java.lang.UnsupportedClassVersionError: client (Unsupported major.minor version 51.0) 
    at java.lang.ClassLoader.defineClass0(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:539) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:251) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:55) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:194) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:187) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:289) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:235) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) 

हालांकि यह मेरी मशीन पर ठीक काम किया:

मैं जब निम्न अपवाद उत्पन्न हुआ था किसी और मशीन में एक आवेदन का शुभारंभ किया।

उत्तर

10

जेडीके कंपाइलर के विभिन्न संस्करण विभिन्न वर्ग संस्करण उत्पन्न करते हैं। उदाहरण के लिए, जावा 1.4 48.0 उत्पन्न करता है, 1.5 49.0 और 1.6 50.0 उत्पन्न करता है।

एक जेवीएम आमतौर पर जेवीएम से कक्षाओं को "कम" से लोड करने में सक्षम होता है लेकिन कभी भी अधिक नहीं होता है। आप शायद 1.5 जेवीएम, या जैसे 1.6 के लिए संकलित कक्षा का उपयोग करने की कोशिश कर रहे हैं।

यदि आप रुचि रखते हैं तो कक्षा संस्करणों को खोजने के लिए एक अच्छा टूल bcel है। विशेष रूप से, यह चींटी कार्यों का एक अच्छा सेट है।

+0

'जावप' (जावा में अंतर्निहित डिस्सेबलर) का उपयोग प्रमुख और मामूली संस्करण की जांच के लिए किया जा सकता है। यदि आप इस संस्करण को प्रोग्रामेटिक रूप से जांचना चाहते हैं तो बीसीईएल अधिक उपयुक्त होगा। – peakit

3

इसका मतलब है कि आपका कंपाइलर संस्करण जेवीएम संस्करण से अधिक हालिया है जहां आप कक्षाएं चलाने की कोशिश कर रहे हैं। या तो अपनी मशीन के जावा कंपाइलर को डाउनग्रेड करें या अन्य मशीन के रनटाइम जेवीएम को अपग्रेड करें।

+1

एक तीसरा विकल्प है (अधिकांश जावा कंपाइलर्स के लिए)। आप 'javac-target 1.1' जैसे कुछ कर सकते हैं जो एक आधुनिक कंपाइलर से एक प्राचीन JVM के लिए उपयुक्त बाइटकोड उत्पन्न करेगा। वास्तव में संकलक को डाउनग्रेड करने की कोई आवश्यकता नहीं है। – emory

+0

@ emory '1.1' क्या दर्शाता है? –

+1

@ सुहैलगुप्त मेरे उदाहरण में, मेरे पास 1.7 कंपाइलर है लेकिन मैं 1.1 जेवीएम पर बाइटकोड का उपयोग करना चाहता हूं। आपके मामले में अधिक संभावना है, आपके पास 1.6 कंपाइलर है लेकिन 1.5 जेवीएम (जैसे http://stackoverflow.com/a/8605030/348975) पर बाइट कोड का उपयोग करना चाहते हैं - तो आप 'javac-target 1.5' – emory

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