java.lang.UnsupportedClassVersionError: หมายเลขรุ่นไม่ถูกต้องในไฟล์. class


140

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันรวมไลบรารี opensource ที่ฉันต้องรวบรวมจากแหล่งที่มา ตอนนี้คำแนะนำทั้งหมดบนเว็บระบุว่าโค้ดถูกรวบรวมในเวอร์ชันหนึ่งและดำเนินการในเวอร์ชันอื่น (ใหม่บนเก่า) อย่างไรก็ตามฉันมี JRE หนึ่งเวอร์ชันในระบบของฉัน ถ้าฉันใช้คำสั่ง:

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

และตรวจสอบใน Eclipse สำหรับคุณสมบัติของห้องสมุด java ที่ฉันได้รับ 1.5.0_18

ดังนั้นฉันต้องสรุปสิ่งอื่น ๆ ภายในตัวเองในชั้นเรียนมีการโยนข้อยกเว้น? เป็นไปได้ไหม


2
คุณมีห้องสมุดรุ่นคอมไพล์ที่อื่นที่อาจอยู่ใน classpath ของคุณก่อนหรือไม่
Jeff Storey

ความคิดที่ดี แต่ไม่มี ฉันตรวจสอบโดยใช้ 'ค้นหา -name '* .jar' | xargs หาตำแหน่ง 'จากโฟลเดอร์ lib ด้วย JARs นอกจากนี้ฉันไม่คิดว่า Eclipse ใช้ CLASSPATH หรือไม่ คำแนะนำที่ดีอื่น ๆ
grmn.bob

วิธีใช้คำสั่ง find -name '* .jar' บน cmd เนื่องจากฉันต้องการสร้างรหัส jre src อีกครั้ง ... และเพื่อที่ฉันจะต้องใช้ cmd นี้ ..... javalobby.org/java/forums /t103334.html.....my jdk อยู่ที่ C: \ Program Files \ Java \ jdk1.6.0_31
ผู้เรียน

คำตอบ:


185

ฉันได้เรียนรู้ว่าข้อความผิดพลาดเช่นนี้มักจะถูกต้อง เมื่อมันเป็นไปไม่ได้ POSSIBLY (ในใจของคุณ) เป็นสิ่งที่รายงานข้อผิดพลาดบอกคุณไปล่าสัตว์เพื่อหาปัญหาในพื้นที่อื่น ... เพียงเพื่อค้นหาชั่วโมงต่อมาว่าข้อความผิดพลาดเดิมถูกต้องแน่นอน

เนื่องจากคุณกำลังใช้ Eclipse ฉันคิดว่า Thilo ทำถูกต้องเหตุผลที่เป็นไปได้มากที่สุดที่คุณได้รับข้อความนี้ก็เพราะโครงการหนึ่งของคุณกำลังคอมไพล์ 1.6 คลาส ไม่สำคัญว่าคุณจะมี 1.5 JRE บนระบบเท่านั้นเนื่องจาก Eclipse มีคอมไพเลอร์ของตัวเอง (ไม่ใช่ javac) และต้องการเพียง 1.5 JRE เพื่อรวบรวม 1.6 คลาส อาจเป็นเรื่องแปลกและการตั้งค่าจะต้องไม่ถูกตรวจสอบเพื่ออนุญาต แต่ฉันก็ทำได้

สำหรับโครงการที่เป็นปัญหาให้ตรวจสอบส่วนคุณสมบัติโครงการ (โดยปกติคือ Alt + Enter), Java Compiler นี่คือภาพของโครงการที่กำหนดค่าให้คอมไพล์ 1.6 แต่มีเพียง 1.5 JRE

ป้อนคำอธิบายรูปภาพที่นี่


เห็นด้วยอย่างยิ่ง ... นั่นคือเหตุผลที่ฉันถามในความคิดเห็นของฉันคำถามสำหรับวิธีการกำหนดจุด ฉันไม่รู้จักคลาสภายในของ Eclipse ไลบรารีถูกคอมไพล์บนบรรทัดคำสั่งด้วย 'javac' และรวมเข้ากับโครงการ Eclipse ของฉัน ฉันจะพยายามรวบรวมโครงการของฉันจากบรรทัดคำสั่ง คุณแก้ไขปัญหานี้ได้อย่างชัดเจนในอดีตและคำแนะนำของคุณยอดเยี่ยม
grmn.bob

3
หากคุณมี JDK (ซึ่งมีแหล่งที่มา) คุณควรจะสามารถเพิ่มเบรกพอยต์บางส่วนใน Eclipse และหวังว่าจะเห็นระดับที่มันพยายามโหลด วิธีที่ง่ายที่สุดน่าจะเป็นเบรกพอยต์ในตัวสร้างสำหรับ UnsupportedClassVersionError (หรือจุดพัก Eclipse Exception, ไอคอน 'J!') จากนั้นคุณสามารถตรวจสอบว่ามันมาถึงที่นั่นได้อย่างไร
Joshua McKinnon

ตกลง. ฉันพบผู้เชี่ยวชาญในอาคารและเขาสามารถชี้ Eclipse ไปยัง JRE เดียวกันกับบรรทัดคำสั่งของฉัน ฉันสร้างใหม่กับ 1.6 และวิ่งแข่งกับ 1.6 และมันก็ใช้ได้ เห็นได้ชัดว่าฉันผิดที่ไม่มีอะไรนอกจาก 1.5 เขาแสดงให้ฉันดู ขอบคุณสำหรับความช่วยเหลือ - ตอนนี้ฉันกำลังไปที่ปัญหาต่อไปของฉัน! :)
grmn.bob

2
ฉันมีปัญหาเดียวกัน ข้อผิดพลาดที่ฉันทำคือฉันใช้คอมไพเลอร์ 1.5 JRE และ 1.6 ซึ่งไม่ได้แก้ไขข้อผิดพลาดระดับคลาสที่ไม่สนับสนุน ดังนั้นฉันจึงติดตั้ง 1.6 JRE ใน eclipse ของฉันและใช้คอมไพเลอร์ 1.6 จากนั้นทุกอย่างก็เริ่มทำงานได้ดี
Vanchinathan Chandrasekaran

1
ฉันต้องการ upvote นี้เป็นครั้งที่สองเพราะมันเป็นครั้งที่สองที่ฉันมีปัญหาการค้นหาพบคำตอบนี้และมันถูกต้อง > _ <
AlbeyAmakiir

9

คุณได้ลองทำ "clean" เต็มรูปแบบแล้วสร้างใหม่ใน Eclipse (Project-> Clean ... ) หรือไม่

คุณสามารถคอมไพล์และรันด้วย "javac" และ "java" ได้โดยตรงจากบรรทัดคำสั่งหรือไม่? ทำงานอย่างถูกต้องหรือไม่

หากคุณคลิกขวาที่โครงการของคุณไปที่ "Properties" จากนั้นไปที่ "Java Build Path" มีรายการที่น่าสงสัยภายใต้แท็บใด ๆ หรือไม่ นี่คือ CLASSPATH ของคุณ

ในการกำหนดค่าตามความชอบ Eclipse คุณอาจต้องการตรวจสอบอีกครั้งในส่วน "JRE ที่ติดตั้งแล้ว" ในส่วน "Java" และตรวจสอบให้แน่ใจว่าตรงกับสิ่งที่คุณคิดว่าควร

คุณมีไฟล์. class เก่าค้างอยู่รอบ ๆ หรือคุณได้รับการคอมไพล์เวลา / รันไทม์ใน Java เวอร์ชันที่คุณกำลังใช้


ใช่ (เต็มสะอาด); ยังไม่ได้ลอง (โปรเจ็กต์จากบรรทัด cmd); อาจจะ / ไม่ (ฉันลบรายการจาก Eclipse "Java Build Path"); ทำอย่างนั้น (JREs - นั่นคือที่ที่ฉันได้รับรุ่น #)
grmn.bob

5

คุณรวบรวมกับ Eclipse หรือไม่? มันใช้คอมไพเลอร์ที่แตกต่างกัน (ไม่ใช่ javac) ซึ่งไม่ควรส่งผลให้เกิดข้อผิดพลาดนี้ (หากทุกอย่างได้รับการกำหนดค่าอย่างเหมาะสม) แต่คุณสามารถลองรวบรวมด้วย javac แทน

หากวิธีนี้แก้ไขปัญหาได้ให้ลองดูว่า Eclipse มีการตั้งค่าคอมไพเลอร์ไม่ถูกต้องหรือไม่ มีเป้าหมายเป็นจาวา 5 โดยเฉพาะ


นั่นคือสิ่งที่ฉันเรียนรู้ ฉันจะลองสร้างทั้งสองชิ้นด้วยวิธีเดียวกัน (cmd line และ / หรือ eclipse)
grmn.bob

1
ขอบคุณ Thilo ฉันได้เรียนรู้มากมายเกี่ยวกับ Eclipse และ Java และรุ่นคลาส และมดก็เช่นกัน
grmn.bob

2

ฉันยังได้รับข้อผิดพลาดเดียวกัน เหตุผลที่ฉันรวบรวมโครงการโดยใช้ Maven ฉันมี JAVA_HOME ที่ชี้ไปที่ JDK7 และดังนั้นจึงใช้ Java 1.7 สำหรับการรวบรวมและเมื่อเรียกใช้โครงการที่ฉันใช้ JDK1.5 การเปลี่ยนรายการด้านล่างในไฟล์. classpath หรือการเปลี่ยนแปลงใน eclipse ในขณะที่ภาพหน้าจอช่วยแก้ไขปัญหาได้

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

หรือเปลี่ยนแปลงในการกำหนดค่าการรันของ eclipse เป็น ป้อนคำอธิบายรูปภาพที่นี่


1

ตรวจสอบไฟล์ jar ใด ๆ ในโครงการของคุณที่คอมไพล์แล้วสำหรับ Java เวอร์ชันที่สูงกว่า หากนี่เป็นไลบรารีของคุณเองคุณสามารถแก้ไขได้โดยเปลี่ยนแอตทริบิวต์เวอร์ชันเป้าหมายเป็น javac

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">

0

สถานการณ์อื่นที่อาจเกิดขึ้นคือเมื่อคุณเรียกใช้อินสแตนซ์ของ eclipse (สำหรับการดีบักเป็นต้น) จาก host eclipse - ในกรณีนี้การเปลี่ยนระดับของโปรเจ็กต์หรือไลบรารี JRE บนคลาสพา ธ ของโปรเจ็กต์ไม่ได้ช่วยอะไร สิ่งที่สำคัญคือ JRE ใช้เพื่อเรียกใช้สภาวะแวดล้อม eclipse เป้าหมาย


0

ตรวจสอบความชัดเจนด้วยเสมอ ฉันได้รับข้อผิดพลาดนี้เมื่อฉันบังเอิญจับทรัพยากรที่ไม่ถูกต้องสำหรับการเพิ่มและลบการดำเนินการของเซิร์ฟเวอร์ มันง่ายที่จะมองข้าม


0

การลบไฟล์การตั้งค่าเฉพาะโครงการ (Eclipse workspace / project folder / .settings /) จากโฟลเดอร์ project จะทำเช่นกัน เห็นได้ชัดว่าเราต้องทำความสะอาดโครงการและสร้างหลังจากลบ


0

การเปลี่ยนโปรเจ็กต์เพื่อใช้ java 1.7: เพื่อให้ทำงานได้ตามขั้นตอนเหล่านี้:

  • เปลี่ยนระดับความสอดคล้องของคอมไพเลอร์
  • เปลี่ยนโครงการของคุณ JRE / JDK เป็นระดับเดียวกัน (1.7 ในกรณีของฉัน)
  • ทำการเปลี่ยนแปลงเดียวกันในโครงการทั้งหมดที่อ้างอิงโดยโครงการของคุณ
  • เปลี่ยนการกำหนดค่า run / debug ของคุณเพื่อใช้ JRE / JDK (หรือระดับเดียวกัน)

ไม่ทำงาน?

  • ลบโปรเจ็กต์ Bin Bin
  • สะอาด
  • สร้างใหม่

ยังไม่ทำงานใช่ไหม

ในไดเรกทอรีของโครงการของคุณ: แก้ไข. setset / org.eclipse.jdt.core.prefs> ตรวจสอบให้แน่ใจว่ามีการใช้ระดับเป้าหมายของคุณแล้ว

โชคดี!


0

ฉันแก้ไขปัญหานี้โดยการเปลี่ยน jre ที่จำเป็นสำหรับเซิร์ฟเวอร์ (ในกรณีของฉันคือ Tomcat) จากแท็บเซิร์ฟเวอร์ใน eclipse ให้ดับเบิลคลิกที่เซิร์ฟเวอร์ (เพื่อเปิดหน้าสำหรับการกำหนดค่าเซิร์ฟเวอร์) คลิกที่สภาพแวดล้อมรันไทม์จากนั้นเปลี่ยน JRE ที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.