java.lang.UnsupportedClassVersionError: .class dosyasındaki sürüm numarası bozuk mu?


140

Kaynaktan derlemek zorunda olduğum bir açık kaynak kitaplığı eklediğimde bu hatayı alıyorum. Artık web'deki tüm öneriler, kodun bir sürümde derlendiğini ve başka bir sürümde (eski sürümde yeni) yürütüldüğünü gösterir. Ancak, sistemimde yalnızca bir JRE sürümü var. Komutları çalıştırırsam:

$ 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)

ve Eclipse içinde java kütüphanesinin özelliklerini kontrol edin. 1.5.0_18

Bu nedenle, bir sınıfın içinde başka bir şey daha yapmak zorundayım, istisnayı atıyor ?? Bu mümkün mü?


2
önce sınıf yolunuzda olabilecek başka bir yerde kütüphanenin derlenmiş bir versiyonuna sahip misiniz?
Jeff Storey

İyi fikir, ama hayır. 'Bul'u kullanarak bir kontrol yaptım. -adı '* .jar' | xargs find 'lib klasöründen JAR'larla birlikte bulunur. Ayrýca Eclipse'nin CLASSPATH kullandýđýný düţünmedim mi? Başka iyi öneriniz var mı?
grmn.bob

nasıl tekrar jre src kodunu yeniden oluşturmak için arıyorum cmd bu find -name '* .jar' komutunu kullanmak için ... ve bunun için bu cmd ateş gerekir ..... javalobby.org/java/forums /t103334.html.....my jdk C: \ Program Files \ Java \ jdk1.6.0_31
Öğrenci

Yanıtlar:


185

Bunun gibi hata mesajlarının genellikle doğru olduğunu öğrendim. OLASI OLARAK (aklınızda) rapor edilen hatanın söylediği şey olmadığında, başka bir alanda bir sorun için avlanmaya başlarsınız ... sadece saat sonra orijinal hata mesajının gerçekten doğru olduğunu öğrenmek için.

Eclipse kullandığınız için Thilo'nun doğru olduğunu düşünüyorum. Bu mesajı almanızın en olası nedeni, projelerinizden birinin 1.6 sınıf derlemesi. Eclipse kendi derleyicisine (javac değil) sahip olduğundan ve 1.6 sınıfı derlemek için sadece 1.5 JRE'ye ihtiyaç duyduğundan, sistemde yalnızca 1.5 JRE olması önemli değildir. Tuhaf olabilir ve buna izin vermek için bir ayarın işaretinin kaldırılması gerekir, ancak bunu yapmayı başardım.

Söz konusu proje için, Proje Özellikleri (genellikle Alt + Enter), Java Derleyici bölümüne bakın. İşte 1.6 derlemek için yapılandırılmış bir projenin görüntüsü, ancak sadece 1.5 JRE.

resim açıklamasını buraya girin


Tamamen katılıyorum ... Bu yüzden, yorumumda, kesin nokta bulma sorusunu sordum. Eclipse iç sınıflarını bilmiyordum. Kütüphane komut satırında 'javac' ile derlenmiş ve Eclipse projeme entegre edilmiştir. Projemi komut satırından derlemeye çalışacağım. Geçmişte bu sorunu açıkça çözdünüz ve önerileriniz harika.
grmn.bob

3
Eğer kaynakları olan JDK'nız varsa, Eclipse'e bazı kesme noktaları ekleyebilmeniz ve umarım hangi sınıfı yüklemeye çalıştığını görebilirsiniz. En kolay yol muhtemelen UnsupportedClassVersionError (veya bir Eclipse Exception kesme noktası, 'J!' Simgesi) için yapıcıdaki bir kesme noktasıdır, o zaman nasıl oraya geldiğini kontrol edebilirsiniz.
Joshua McKinnon

TAMAM. Binada bir uzman buldum ve Eclipse'yi komut satırımla aynı JRE'ye yönlendirmeyi başardı. Daha sonra 1.6'ya karşı yeniden inşa ettim ve 1.6'ya karşı koştum ve hepsi işe yarıyor. Açıkçası, 1.5 dışında bir şeyim olmadığı konusunda yanılmışım. Bana nereye bakmam gerektiğini gösterdi. Yardımın için teşekkürler - şimdi bir sonraki sorunum var! :)
grmn.bob

2
Aynı sorunu yaşadım. Yaptığım hata 1.5 JRE ve 1.6 derleyicisini kullanmaktı. Hangi desteklenmeyen sınıflama hatası çözülmedi. Bu yüzden tutulmasıma 1.6 JRE yükledim ve 1.6 derleyici kullandım. Sonra her şey iyi çalışmaya başladı.
Vanchinathan Chandrasekaran

1
Bunu ikinci kez yükseltmek istiyorum, çünkü ikinci kez sorun yaşadım, aradım, bu cevabı buldum ve doğru oldu. > _ <
AlbeyAmakiir

9

Tam bir "temiz" yapmayı ve sonra Eclipse'de yeniden oluşturmayı denediniz mi (Project-> Clean ...)?

Doğrudan komut satırından "javac" ve "java" ile derleyip çalıştırabiliyor musunuz? Bu düzgün çalışıyor mu?

Projenize sağ tıklarsanız, "Özellikler" e ve "Java Derleme Yolu" na giderseniz, sekmelerden herhangi birinde şüpheli giriş var mı? Bu aslında SINIFINIZ.

Eclipse tercihlerinde, "Java" bölümündeki "Yüklü JRE'ler" bölümünü tekrar kontrol etmek ve olması gerektiğini düşündüğünüzle eşleştiğinden emin olmak isteyebilirsiniz.

Kesinlikle bir yere yerleştirilmiş eski bir .class dosyanız var veya kullandığınız Java sürümlerinde derleme zamanı / çalışma zamanı uyuşmazlığı alıyorsunuz.


evet (tam temiz); denemedim (cmd çizgisinden proje); belki / no (Eclipse "Java Build Path" dan girişleri kaldırdım); bunu yaptım (JRE'ler - burada sürüm # var).
grmn.bob

5

Eclipse ile derledin mi? Farklı bir derleyici kullanır (javac değil). Bu, bu hataya neden olmamalıdır (her şey düzgün bir şekilde yapılandırılmışsa), ancak bunun yerine javac ile derlemeyi deneyebilirsiniz.

Bu sorunu çözdüyse, Eclipse'in bazı yanlış derleyici ayarlarına sahip olup olmadığını kontrol etmeyi deneyin. Özellikle Java 5'i hedefleyin.


Ben de öyle öğreniyorum. İki parçayı aynı şekilde inşa etmeye çalışacağım (cmd çizgisi ve / veya tutulma).
grmn.bob

1
Teşekkürler Thilo, bugün Eclipse ve Java ve sınıf sürümleri hakkında çok şey öğrendim. Ve biraz da karınca hakkında .
grmn.bob

2

Aynı hatayı aldım. Bunun nedeni Maven'i kullanarak projeyi derliyordum. JDK7 işaret JAVA_HOME vardı ve bu nedenle java 1.7 derleme için kullanılan ve proje çalıştırırken JDK1.5 kullanıyordum. Aşağıdaki girdinin .classpath dosyasında değiştirilmesi veya ekran görüntüsünde olduğu gibi tutulmada değişiklik yapılması sorunu çözdü.

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

veya tutulmanın çalışma konfigürasyonlarında resim açıklamasını buraya girin


1

Ayrıca, projenizde Java'nın daha yüksek bir sürümü için derlenmiş olan jar dosyalarını da kontrol edin. Bunlar kendi kitaplıklarınızsa, hedef sürüm özniteliğini javac olarak değiştirerek bunu düzeltebilirsiniz.

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

0

Bunun olabileceği bir başka senaryo, bir ana bilgisayar tutulmasından bir tutulma örneği (hata ayıklama vb.) İçin başlattığınızda - bu durumda projenin düzeyini veya JRE kütüphanesini tek başına projenin sınıf yolunda değiştirmek yardımcı olmaz. Önemli olan JRE'nin hedef tutulma ortamını başlatmak için kullandığı.


0

Daima bariz olanı kontrol edin. Yanlışlıkla sunucunun ekleme ve kaldırma eylemi için yanlış kaynak yakaladı zaman bu hatayı aldım. Göz ardı etmek kolay olabilir.


0

Projeye özgü ayar dosyalarının (Eclipse çalışma alanı / proje klasörü / .settings /) proje klasöründen silinmesi de yapılacaktır. Açıkçası, bir projeyi temizlememiz ve sildikten sonra derlememiz gerekiyor.


0

projeyi java 1.7 kullanacak şekilde değiştirme: Bunun çalışması için şu adımları izleyin:

  • Derleyici Uyumluluk Düzeyini Değiştirin
  • Projelerinizi JRE / JDK'yı aynı seviyeye getirin (benim durumumda 1.7)
  • Projenizin referans aldığı tüm projelerde aynı değişikliği yapın
  • Çalıştırma / hata ayıklama yapılandırmanızı JRE / JDK'yı (veya aynı düzeydeki) kullanacak şekilde değiştirme

Çalışmıyor?

  • projeleri sil Bin dizini
  • Temiz
  • yeniden inşa etmek

Hala çalışmıyor?

projenizin dizininde: edit .settings / org.eclipse.jdt.core.prefs> hedef seviyenizin uygulandığından emin olun

İyi şanslar!


0

sunucu için gerekli jre değiştirerek bu sorunu çözdü (benim durumumda tomcat). Tutulmadaki Sunucu sekmesinden, sunucuya çift tıklayın (sunucu yapılandırması için sayfayı açmak için), Çalışma zamanı ortamına tıklayın, ardından JRE'yi değiştirin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.