Jak naprawić błąd java.lang.UnsupportedClassVersionError: Nieobsługiwana wersja główna.minor

1571

Próbuję używać Notepad ++ jako narzędzia do edycji, uruchamiania, kompilacji itp.

Mam zainstalowane środowisko JRE i ustawiłem zmienną ścieżki do .../binkatalogu.

Kiedy uruchamiam mój „Hello world” w Notepad ++, pojawia się następujący komunikat:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Myślę, że problem dotyczy wersji; niektóre wersje Java mogą być stare lub zbyt nowe.

  1. Jak to naprawić?
  2. Czy powinienem zainstalować JDK i ustawić zmienną ścieżki do JDK zamiast JRE?
  3. Jaka jest różnica między PATHzmienną w JRE lub JDK?
ERJAN
źródło
czy zainstalowałeś również jdk? Jre jest środowiskiem Java RunTime. Aby tworzyć aplikacje Java, potrzebujesz również
JDK
tak zrobiłem, a teraz moja zmienna ścieżki wskazuje, gdzie jest jdk. wciąż mam ten błąd „nieobsługiwana wersja pomocnicza 51.0”. Czy uważasz, że powinienem zainstalować starszą wersję JDK? używam jdk 1.7.0
ERJAN
20
Zdarzyło mi się to w systemie Mac OS X, gdy miałem problemy z powodu dziwnej sytuacji Apple java 6 i Oracle java 7 w OSX. krótka wersja: Kompiluj z JDK7, Uruchom z JDK6, pobierz to.
Warren P
7
W java nazwa klasy powinna zaczynać się od dużej litery;)
Ashish Panery
5
Dla El Captain ta odpowiedź mnie naprawiła: stackoverflow.com/a/34201991/1615594
tsuz

Odpowiedzi:

1938

Pokazany numer wersji opisuje wersję środowiska JRE, z którym plik klasy jest zgodny.

Podane główne liczby to:

Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Źródło: Wikipedia )

Aby rozwiązać rzeczywisty problem, należy spróbować uruchomić kod Java z nowszą wersją środowiska Java JRE lub podać parametr docelowy kompilatora Java, aby instruować kompilator, aby utworzył kod zgodny z wcześniejszymi wersjami Java.

Na przykład, aby wygenerować pliki klas zgodne z Javą 1.4, użyj następującego wiersza poleceń:

javac -target 1.4 HelloWorld.java

W nowszych wersjach kompilatora Java prawdopodobnie pojawi się ostrzeżenie o braku ustawiania ścieżki klasy bootstrap. Więcej informacji na temat tego błędu znajduje się w poście na blogu Nowe ostrzeżenie javac dotyczące ustawiania starszego źródła bez ścieżki rozruchowej .

Juha Palomäki
źródło
167
„Pokazany numer wersji opisuje, która wersja, jeśli Java została użyta do skompilowania kodu.” Nie. Pokazuje wersję środowiska JRE, z którą plik klasy jest zgodny. Korzystając z opcji kompilacji krzyżowej , możesz użyć JDK 1.7 do kompilacji kodu z klasową wersją 1.1 (do 1.7).
Andrew Thompson,
85
Ta odpowiedź nie wyjaśnia, jak to naprawić, gdy zadane pytanie?
Jonathan Leung
7
To dobre rozwiązanie do bezpośredniej kompilacji do poprzedniej wersji z Eclipse: stackoverflow.com/a/16345710/2091700
Alphaaa
19
W projekcie eclipse => Proerties => kompilator Java; ustaw „poziom zgodności kompilatora” na wersję zgodną z jre lub jdk. Dla mnie to 1.6 dla Jre 1.6
Sam
5
Może się to zdarzyć, gdy źródło kompilatora jest ustawione jako niezgodne z aktualnie kompilowanym JRE / JDK. Na przykład znalazłem poniższe wartości z folderu eclipse .settings, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7. A moim kompilatorem był 1.6.0_32. Problem został rozwiązany po zmianie wartości na 1.6. Problem powstał po skopiowaniu projektu z innego obszaru roboczego, w którym korzystałem z JDK 1.7 :(
Gana
366

java.lang.UnsupportedClassVersionError dzieje się z powodu wyższego JDK w czasie kompilacji i niższego JDK w czasie wykonywania.

Vivek Kumar Ray
źródło
11
+1: zmiana tego symbolicznego linku ( /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) na wersję używaną do kompilacji z javac rozwiązała go
ezdazuzena
1
Jak mogę dokonać powyższej zmiany?
Ankur Raiyani
8
Projekt -> Właściwości -> Kompilator Java Włącz ustawienia specyficzne dla projektu. Następnie wybierz Poziom zgodności kompilatora do 1.7, 1.6 lub 1.5, skompiluj i przetestuj swoją aplikację.
Vivek Kumar Ray,
Kiedy przeniosłem się na Javę 7, Eclipse w jakiś sposób próbował uruchomić się w Javie 6 ... nie mam pojęcia, dlaczego. Odinstalowany stary JDK załatwił sprawę.
HDave
9
@ezdazuzena użyć, sudo update-alternatives --config javaaby to zrobić.
Thorbjørn Ravn Andersen
115

W Eclipse po prostu przeszedłem do polecenia menu Okno -> Preferencje -> Java -> Kompilator, a następnie ustawiłem „Poziom zgodności kompilatora” na 1.6.

Cacovsky
źródło
3
W środowisku Eclipse niektóre aspekty projektu muszą również zostać zmienione na odpowiednią wersję Java.
Bilal Mirza
6
Dzięki. Warto zauważyć, że ustawienie domyślnego środowiska wykonawczego Eclipse (środowisko JRE, które wchodzi na ścieżkę kompilacji) to osobne ustawienie. Ustawiłem środowisko JRE, ale nie poziom zgodności kompilatora; to naprawiło.
wchargin
Jak wyciągnąłeś wniosek z komunikatu o błędzie, że to właściwe miejsce, aby ustawić tę opcję?
Alexander
Może to: stackoverflow.com/questions/7073485/… może pomóc, jeśli używasz mrówki i zaćmienia.
OuuGiii
Pytanie dotyczy Notepad ++, ale nie Eclipse.
gotwo
60

Nie martw się, mam to rozwiązane.

To jest naprawdę proste - musisz zainstalować BOTH JRE / JDK z tą samą wersją.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

I tak dalej.

ERJAN
źródło
29
java 7 może również obsługiwać 6 bez żadnych problemów.
damienix
@damienix Prawdopodobnie chcesz sprecyzować, że środowisko Java 7 JRE może bez problemu obsługiwać skompilowaną klasę Java 6, w przeciwnym razie twoja instrukcja prowadzi do zamieszania.
Frontear,
43

Ten błąd oznacza, że ​​próbujesz załadować plik „klasy” Java, który został skompilowany z nowszą wersją Java niż zainstalowana.

Na przykład .classplik mógł zostać skompilowany dla JDK 7, a próbujesz uruchomić go z JDK 6.

Zatem rozwiązaniem jest albo:

  • Zaktualizuj środowisko wykonawcze Java lub
  • Zrekompiluj klasę, jeśli masz źródło, używając lokalnego kompilatora Java (jeśli taki masz).

    javac nazwa_pliku.java

Dla programistów może się tak zdarzyć, jeśli inny programista sprawdzi plik .class, a oni mają nowszą wersję java niż ty!

Brad Parks
źródło
22

Próbujesz uruchomić program z wersją Java, która nie obsługuje wersji, w której kod został skompilowany. Zasadniczo musisz więc skompilować kod z wyższą wersją i próbować uruchomić go przy użyciu niższej wersji.

Jak dostajesz

Unsupported major.minor version 51.0

a wersja 51.0 odpowiada J2SE 7 , najprawdopodobniej skompilowałeś swój kod w Javie 7 i próbujesz uruchomić go przy użyciu niższej wersji. Sprawdź, co java -versionwyświetla. Powinna to być wersja Java 7. Jeśli nie, wprowadź odpowiednie zmiany w PATH / JAVA_HOME. Lub możesz skompilować z tą samą wersją, którą próbujesz uruchomić kod. Jeśli konfiguracje są mylące, zawsze możesz podać ścieżkę bezwzględną /home/user/jdk1.7.0_11/bin/javaci /home/user/jdk1.7.0_11/bin/java.

Aniket Thakur
źródło
18

Miałem podobną sytuację na komputerze Mac i działał dla mnie następujący proces:

W terminalu wpisz

vi ~/.profile

Następnie dodaj ten wiersz do pliku i zapisz

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

gdzie wersja jest wersją na twoim komputerze, np 1.7.0_25.

Wyjdź z edytora, a następnie wpisz następujące polecenie, aby stało się skuteczne

source ~/.profile 

Następnie wpisz java -version, aby sprawdzić wynik

java -version 

Co to jest .profileplik?

Plik .profile jest plikiem ukrytym. Jest to plik opcjonalny, który informuje system, które komendy należy uruchomić, gdy zaloguje się użytkownik, którego plik profilu jest zalogowany. Na przykład, jeśli moja nazwa użytkownika to bruno i w pliku / Users / bruno / znajduje się plik .profile, cała jego zawartość zostanie wykonany podczas procedury logowania.

Źródło: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

Tony
źródło
16

W menu Eclipse Okno -> Preferencje -> Java -> Kompilator zaznacz także „Konfiguruj ustawienia specyficzne dla projektu”.

Jeśli nadal występuje błąd w tej samej wersji Java: spróbuj ręcznie usunąć folder kompilacji projektu. Następnie uruchom ponownie Eclipse.

Andreas L.
źródło
14

Możesz mieć skompilowaną bibliotekę JAR w Javie 7 i masz tylko Java 6 jako Java Runtime. Może się to zdarzyć w przypadku niektórych nowych bibliotek.

Rio
źródło
14

Najczęstszym problemem jest błędna konfiguracja JAVA_HOMEzmiennej, która powinna wskazywać odpowiednią bibliotekę Java Development Kit, jeśli została zainstalowana wiele razy.

Aby znaleźć lokalizację folderu Java SDK, uruchom następujące polecenia:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian / Ubuntu

Aby sprawdzić, którą java (openjdk) zainstalowałeś, sprawdź:

dpkg -l "openjdk*" | grep ^i

lub:

update-java-alternatives -l

Aby to zmienić, użyj:

update-alternatives --config java

Przedrostek z, sudojeśli jest wymagany.

aby wybrać alternatywną wersję Java.

Lub sprawdź, które są dostępne do instalacji:

apt-cache search ^openjdk

Przedrostek z, sudojeśli jest wymagany.

Następnie możesz zainstalować, na przykład:

apt-get install openjdk-7-jre

Przedrostek z, sudojeśli jest wymagany.

Fedora, Oracle Linux, Red Hat

Zainstaluj / zaktualizuj odpowiedni pakiet poprzez:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

java-1.7.0-openjdkPakiet zawiera tylko Java Runtime Environment. Jeśli chcesz tworzyć programy Java, zainstaluj java-1.7.0-openjdk-develpakiet.

BSD

W kolekcji portów FreeBSD znajduje się pakiet OpenJDK 7 o nazwie openjdk7, który prawdopodobnie wymaga ponownej konfiguracji.

Zobacz: strona wiki OpenJDK .

Windows

Wystarczy zainstalować odpowiednią bibliotekę Java SE Development Kit ze strony Oracle lub zainstalować

Jenkins

Jeśli masz problem z Jenkins, zobacz:

Jednak wybór odpowiedniej wersji Java (nowszej) update-alternativespowinien działać.

kenorb
źródło
Ta odpowiedź zadziałała dla mnie podczas próby użycia powłoki Spark2 na hoście po dodaniu usługi Spark do klastra z cloudera.
Alter
12

Ten sam problem napotkałem, pracując ze skryptem Ant do zbudowania aplikacji.

Używam Eclipse do programowania aplikacji i zmieniłem wersję kompilatora we właściwościach kompilacji projektu. Ale to nie działało dla mnie. Potem dowiedziałem się, że mogę dostarczyć wersję kompilatora w skrypcie Ant.

Zmodyfikowałem skrypt Ant w sekcji, w której kompiluje on pliki Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Pomogło mi to rozwiązać nieobsługiwany poważny drobny problem.

Mandar Pandit
źródło
12

Kiedy zainstalowałem JDK 1.7, problem został rozwiązany.

użytkownik3168034
źródło
12

Mam ten sam problem z projektem napisanym w wersji 1.7 i próbowałem go wykonać w wersji 1.6.

Moje rozwiązanie w Eclipse:

  • Kliknij prawym przyciskiem myszy Właściwości projektu -> Ścieżka kompilacji Java -> Biblioteki

  • Wybierz bibliotekę systemową JRE i kliknij Edytuj po prawej stronie, a następnie wybierz docelową wersję JRE.

  • Teraz przejdź do kompilatora Java po lewej stronie i zmień poziom zgodności kompilatora na swój cel.

To działało dla mnie.

Ben
źródło
11

Jak odpowiedziało w innym miejscu kilka osób, program Java jest uruchamiany na starszej wersji języka Java niż ta, dla której został skompilowany. Musi zostać „skompilowany krzyżowo” w celu zapewnienia kompatybilności wstecznej. Innymi słowy, istnieje niezgodność między źródłową a docelową wersją Java.

Zmiana opcji w menu Eclipse nie odpowiada oryginalnemu plakatowi, który powiedział, że nie używa Eclipse. W OpenJDK javac w wersji 1.7 możesz kompilować krzyżowo dla 1.6, jeśli używasz parametrów -sourcei -target, dodatkowo, podaj plik rt.jar wersji docelowej (czyli starszej) w czasie kompilacji. Jeśli faktycznie instalujesz środowisko JRE 1.6, możesz wskazać jego instalację (na przykład /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar na Ubuntu, / usr / jdk / jdk1. Najwyraźniej 6.0_60 / jre / lib / rt.jar na SunOS. Niestety nie wiem, gdzie to jest w systemie Windows. Tak jak:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

Wygląda na to, że możesz po prostu pobrać plik rt.jar z Internetu i wskazać go. Nie jest to jednak zbyt eleganckie:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
Mace Ojala
źródło
10

Oparte na tym...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

W Eclipse kliknij prawym przyciskiem myszy projekt w eksploratorze pakietów:

Ścieżka kompilacji -> Konfiguruj ścieżkę kompilacji

Pod:

Ścieżka kompilacji Java -> Biblioteki -> Dodaj bibliotekę -> Biblioteka systemu JRE -> Zainstalowane środowiska JRE -> Wyszukaj .

Dodaj wymagane środowisko JRE, wybierając bibliotekę z listy dostępnej po zakończeniu wyszukiwania.

Sztolni Ya
źródło
10
  • Jeśli używasz Maven, ustaw poziom kompilacji Java. Otwórz wiersz poleceń i napisz java -versiondla swojego poziomu kompilacji:

    Wpisz opis zdjęcia tutaj

  • Jeśli korzystasz z IntelliJ IDEA, wybierz projekt → PlikUstawieniaKompilacja wykonania wdrożeniaKompilatorKompilator Java . Następnie zmień kod bajtu na 1.7, tak jak na tym obrazku:

    Wpisz opis zdjęcia tutaj

ethemsulan
źródło
Musiałem zrobić również czystą instalację maven po zmianie pom.
Joe Borysko
10

Jeśli napotykasz ten problem podczas korzystania z Maven , możesz skompilować kod za pomocą wtyczki Kompilator Maven .

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

UPDATE: set sourcei targetdo 1.8, jeśli używasz JDK 8.

Thamme Gowda
źródło
fragment opisujący użycie wtyczki do kompilacji krzyżowej byłby bardzo dobry, zamiast odwiedzać / otwierać link
coding_idiot
8

Miałem ten sam komunikat o błędzie podczas uruchamiania Anta z Eclipse, ale inne wymienione tutaj rozwiązania nie rozwiązały mojego problemu. Zabawne było to, że uruchomienie Anta z linii poleceń Windows działało dobrze, więc musiał to być problem z konfiguracją w Eclipse.

Okazało się, że w środowisku Eclipse można określić środowisko, w którym Ant powinien działać, i zostało to ustawione jako JRE zamiast JDK.

  • Idź do: Uruchom -> Narzędzia zewnętrzne -> Konfiguracje narzędzi zewnętrznych ...
  • Wybierz plik build.xml Ant dla swojego projektu (jeśli masz wiele projektów)
  • Aktywuj kartę „JRE”
  • Tutaj wybrano „Oddzielne środowisko JRE: jre6”. Kiedy zmieniłem to na JDK z serii 1.6 lub 1.7, błąd zniknął.
ckielstra
źródło
8

Jak to naprawić?

Ten błąd oznacza, że ​​środowisko JRE używane do wykonania kodu klasy nie rozpoznaje używanej wersji języka Java. Zwykle dlatego, że wersja Java, która wygenerowała plik klasy (tj. Skompilowała go), jest nowsza.

Aby to naprawić, możesz albo

a) Skompiluj źródła Java za pomocą tej samej lub starszej wersji kompilatora Java, który będzie używany do jego uruchomienia. tj. zainstaluj odpowiedni JDK.

b) Skompiluj źródła Java za pomocą nowszej wersji kompilatora Java, ale w trybie zgodności. tzn. użyj -targetparametru.

c) Uruchom skompilowane klasy w środowisku JRE, które jest tej samej lub nowszej wersji, co pakiet JDK użyty do skompilowania klas.

Możesz sprawdzić wersje, których aktualnie używasz javac -versiondla kompilatora i java -versionśrodowiska wykonawczego.

Czy powinienem zainstalować JDK i ustawić moją zmienną PATH na JDK zamiast JRE?

Do kompilacji z pewnością zainstaluj i skonfiguruj odpowiedni pakiet JDK.

W przypadku środowiska wykonawczego możesz użyć tego, który jest dostarczany z JDK lub samodzielnym JRE, ale niezależnie od tego, upewnij się, że zainstalowałeś odpowiednie wersje i że skonfigurowałeś PATH tak, aby nie było niespodzianek.

Jaka jest różnica między zmienną PATH w JRE lub JDK?

Zmienna środowiskowa PATH informuje powłokę poleceń, gdzie szukać wpisywanego polecenia. Podczas pisania javainterpreter powłoki poleceń przejrzy wszystkie lokalizacje określone w PATHzmiennej, od lewej do prawej, w celu znalezienia odpowiedniego javapliku wykonywalnego do uruchomienia. Jeśli masz zainstalowanych wiele wersji Javy - tzn. Masz javaplik wykonywalny w wielu lokalizacjach określonych w zmiennej PATH, to pierwsza napotkana podczas przechodzenia od lewej do prawej będzie wykonywana.

Polecenie kompilatora jest javaci jest dostarczane tylko z JDK. Komenda javauruchomieniowa jest dostarczana wraz z JDK i znajduje się w JRE.

Prawdopodobnie masz javaczainstalowaną jedną wersję (51.0 = Java 7) , a także taką samą javazainstalowaną wersję , ale inna poprzednia wersja javapojawia się wcześniej w ścieżce i dlatego jest wywoływana zamiast oczekiwanej .

Vihung
źródło
7

Użyłeś wyższej wersji JDK do kompilacji i próby uruchomienia z niższej wersji JDK / JRE .

Aby to sprawdzić, zobacz informacje o wersji:

javac -version

java -version

Będą różne, a javac będzie miał wyższy numer wersji.

Aby obejść ten problem, uruchom java z wersji JDK lub jeśli masz nowszą wersję JRE / JDK, która również będzie działać.

which javacpoda ci na przykład lokalizację /usr/bin/javac. Wystarczy uruchomić bezpośrednio za pomocą /usr/bin/java <program>.

LUB możesz ustawić zmienną środowiskową jako trwałe rozwiązanie.

P Lawliet
źródło
6

Miałem ten problem, gdy wróciłem do Java 6 i próbowałem uruchomić klasy wcześniej skompilowane z Javą 7. To, co zadziałało, to Preferencje> java> kompilator -> ustaw poziom zgodności na 1.6 i co najważniejsze „skonfiguruj ustawienia projektu” ..

użytkownik3534268
źródło
6

Dzisiaj ten komunikat o błędzie pojawił się w naszym Tomcat 7 na Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 kwietnia 2014 09:00:55 org.apache.catalina.core.StandardContext filterStart SEVERE
: wyjątek uruchamiający filtr struts2
java.lang.UnsupportedClassVersion Błąd : kontroler / ReqAccept: Nieobsługiwana wersja główna. Mniejsza wersja 51.0 (nie można załadować kontrolera klasy. ReqAccept)

Aplikacja Struts jest kompilowana z Javą 7.

Okazało się, że ktoś używa „usługi tomcat [stop / start]” do ponownego uruchomienia Tomcat 7,

$ ps -ef | grep java
tomcat7 31783 1 32 20:13? 00:00:03 / usr / lib / jvm / default-java / bin / java ...
$ / usr / lib / jvm / default-java / bin /
java - wersja java wersja „1.6.0_27”

Co powoduje błąd „Nieobsługiwana wersja główna. Mniejsza wersja 51.0”.

Kiedy użyliśmy „/etc/init.d/tomcat7 [stop / start]” do ponownego uruchomienia Tomcat 7, problem został rozwiązany.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24? 00:00:10 /usr/local/java/jdk1.7.0_15/bin/java
$ /usr/local/java/jdk1.7.0_15/bin/java -wersja
java wersja „1.7.0_15”

oraclesoon
źródło
6

Rozwiązałem to. Prowadziłem:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

Błąd jest mylące Unsupported major.minor version 51.0. Sprawia to wrażenie, że wersja 51 (Java 7) nie jest obsługiwana. I powinniśmy używać Java 6.

Błąd powinien być:

Obecna wersja Java, 50, nie jest obsługiwana. Zamiast tego użyj Java w wersji 7 (51: 0 i nowszej)

Siddharth
źródło
6

Twój plik Java jest skompilowany z inną wersją (wyższa wersja kompilatora) niż wersja (niższa wersja środowiska wykonawczego), z którą próbujesz go uruchomić.

Zrozumiałe jest, że klasy skompilowane z niższymi wersjami powinny działać w późniejszych wyższych wersjach. Ale odwrotnie (skompilowane z wyższą wersją kompilatora i próba uruchomienia go z niższą wersją środowiska wykonawczego) czasami nie jest możliwe.

Dlatego ten błąd jest wyświetlany podczas próby uruchomienia programu. Nieobsługiwana wersja główna. Mniejsza wersja xx

P: Utworzyłem aplikację w Javie 7, ale kiedy moi użytkownicy próbują ją uruchomić, pojawia się nieobsługiwany błąd major.minor wersja 51.0. Co to znaczy i co mogę z tym zrobić?

Odp .: Jeśli kompilujesz aplikację przy użyciu javac w Javie 7, wynikowe pliki klas będą miały numer wersji 51.0. Wersje Java w wersji wcześniejszej niż 7 nie rozpoznają tego numeru, więc użytkownicy będą musieli uaktualnić do wersji Java 7 przed uruchomieniem aplikacji. Jeśli nie używasz żadnych interfejsów API języka Java 7, możesz spróbować skompilować aplikację przy użyciu javac -target 1.6, aby utworzyć plik klasy zgodny z wersją 1.6. Jeśli twoja aplikacja jest wdrażana przy użyciu webstart, możesz określić minimalną wymaganą wersję. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Java Web Start i JNLP tutaj. Ten problem zniknie, gdy uruchomimy automatyczną aktualizację do Java 7 dla użytkowników końcowych, którzy obecnie mają Java 6 na swoich komputerach. Oś czasu tego nie jest jeszcze określona, ​​chcemy dać programistom czas na wypracowanie wszelkich problemów między ich kodem a JDK 7.

(Źródło: oracle.com .)

Manohar
źródło
5

Och, Mac OS XI był w stanie rozwiązać ten problem, ustawiając zmienną JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
TomTom
źródło
4

Najpierw zrozummy podstawy ...

JRE jest składnikiem NetBeans / Eclipse / standalone, który dostarczy Ci bibliotek, JVM, wtyczek Java i Java web start. Pamiętaj, że nie zapewnia kompilatorów ani debuggerów.

JDK jest nadzbiorem JRE wraz z kompilatorami i debuggerami.

Więc jeśli masz domyślną bibliotekę jako JRE zamiast JDK, będziesz miło spędzić czas na importowaniu rzeczy, ale nie da się skompilować.

Zamiast tego ustaw swoją ścieżkę na JDK (używam NetBeans, i ustawiam je za pomocą netbeans.conf w netbeans / etc / netbeans.conf i zmieniam ścieżkę).

Creative_Cimmons
źródło
3

Miałem problem polegający na tym, że musiałem uruchomić kompilację Maven w moim projekcie z wiersza poleceń, aby przeprowadzić testy jednostkowe; jeśli dokonałem zmiany w klasie testowej i pozwoliłem Eclipse na jej automatyczną rekompilację, to pojawia się błąd „Nieobsługiwana wersja główna. mniejsza wersja 51.0”.

Mam zainstalowane JDK6 i JDK7, ale wszystkie moje ustawienia JRE wskazywały na 1.6, zarówno na pom, jak i na stronie właściwości projektu w Eclipse. Żadna ilość projektów aktualizacji Maven i / lub odświeżania nie rozwiązała tego.

W końcu spróbowałem zamknąć projekt i otworzyć go ponownie, i to wydawało się, że to naprawiło! HTH

Matthew Wise
źródło
3

Skompilowałeś swoją klasę Java za pomocą JDK 7 i próbujesz uruchomić tę samą klasę na JDK 6.

Sagar Varpe
źródło
3
  • Zainstaluj JDK 7.0.55 i ustaw Javę dla Eclipse dla JDK 7.0.55.
  • Zbuduj projekt za pomocą JDK 7.0.55, konfigurując na ścieżce kompilacji JDK 7.0.55.
  • Ustaw kompilator w Eclipse dla JDK 7.0.55 w menu Windows -> Preferencje -> Java -> Kompilator - wybierz 1.7.
siddmuk2005
źródło
3

Odpowiedź dotyczy problemu:

Wyjątek w wątku „main” java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: Nieobsługiwana wersja główna. Mniejsza wersja 52.0

Miałem ten sam problem. Dla tych, którzy mieli takie problemy w instancjach AWS ec2 i zostali w jakiś sposób przekierowani tutaj na to pytanie. Odpowiadam za nie i chciałbym podzielić się tym, jak to zrobiłem. Miałem problem, ponieważ instancje Amazon EC2 działały java w wersji 1.7 i być może mój projekt nie był z nim kompatybilny, ponieważ korzystałem z Maven i to było trochę wstępnie skonfigurowane dla java 1.8. Więc zainstalowałem nową wersję Java:

sudo yum -y install java-1.8.0

A następnie ważnym krokiem jest usunięcie starszej wersji:

sudo yum remove java-1.7.0-openjdk

Pamiętaj, aby usunąć go po zainstalowaniu nowej wersji, w przeciwnym razie ciągle będzie korzystać z tej samej starszej wersji i mam nadzieję, że rozwiąże to twój problem, co zrobił w moim przypadku.

Siddharth Choudhary
źródło