kompilacja appletow

0

Witam! Posiadam JDK 1.7 na komputerze skompilowałem kod apletu i na komputerze działa on poprawnie w przeglądarce jednak gdy odpaliłem drugi komputer gdzie mam JRE 1.6 ten kod juz nie działa wyskakuje błąd:

Exception: java.lang.UnsupportedClassVersionError: RamkaTest : Unsupported major.minor version 51.0

Domyślam się że chodzi tutaj o to że kod był kompilowany na wersji 1.7 a odpalany jest na 1.6 ale przecież to jakiś żart czy osoba która będzie korzystać musi mieć tą samą wersje JRE co był kompilowany program (gdzie tu rozum ?) ? Jeśli nie to jak skompilować program aby działał pod każdą wersją JRE ?
Ps. napisany kod na pewno jest kompatybilny z 1.6 i niżej.

2

javac -source 1.6 -target 1.6 ... albo javac -source 6 -target 6 ...

1

Rozum jest taki, że nowa główna wersja wprowadza brak kompatybilności z wersjami wcześniejszymi. Nawet jak kod źródłowy jest identyczny, to bytecode nie musi taki być. Aplety skompilowane starszym JDK powinny działać na nowszym JRE, w drugą stronę to by za bardzo ograniczało możliwości zmian w języku. Dodatkowo zmiana wersji JDK w Eclipse zajmuje krótką chwilę.

0

To skompiluje kod do JRE 1.6 a jak ktoś ma JRE 1.4 to co już nie może odpalić programu który będzie też dla niego kompatybilny ? Przecież applety nie są stworzone po to aby działały dla 20% popularności internautów no chyba że się mylę.

0
bogdans napisał(a):

javac -source 1.6 -target 1.6 ... albo javac -source 6 -target 6 ...

skompilowałem to tak:

javac -source 1.6 -target 1.6 R*.java

dodałem do archiwum:

jar cvf KalkulatorVat.jar R*.class

I nadal na maszynie z 1.6 nie działa :o

0

Poszło do JRE 1.5 fakt.
Z początku myślałem że to jest uzależnione od danej wersji widze że to działa tak iż wersja JDK nie może być wyższa od wersji JRE ok rozumiem.

0

Jakich 20%? Kto ma Javę, ten powinien mieć najnowszą,...

W JDK 1.7 doszło jak zwykle sporo nowych klas i metod.. jak korzystasz z którejś z nich, których nie było w starszych wersjach, to nic dziwnego, że nie zadziała na starszych... nieważne, że sobie target klas zmieniłeś.

Jak celujesz w 1.6, to zainstaluj sobie 1.6 i z niego korzystaj w Eclipse.

Co w tym dziwnego, że na starszych nie działa? Daj mi przykład jakiegokolwiek innego softu, który tak potrafi...

0

Taka mala uwaga: http://www.oracle.com/technetwork/java/eol-135779.html - niech autor poszuka sobie tabelki. Z niej wynika:

  • java 1.4 zakonczyla zywot w pazdzierniku 2008, po 6 latach
  • java 5 zmarla w pazdzierniku 2009
  • teraz mamy kwiecien 2012
  • java 6 jest doestepna od grudnia 2006 (!! jak ten czas leci) i umrze juz w tym roku w listopadzie (chociaz tutaj oracle juz przesunal date o pol roku, mialo to nastapic jakos niebawem)

Jesli chcesz sie zastanawiac, czy komus z java 1.4 to nie pojdzie, to sie zastanawiaj. Ja np. olewam takie sprawy. Ten kto Twoj aplet bedzie chcial uzywac zrobi upgrade, watpie czy wielkie miedzynarodowe banki ktore jeszcze maja jave 1.4 zainstalowana razem z oraclem 8costam (i wykupiony jakis premier support) Twoj aplet obchodzi. A nawet i takie korpo robia upgrady (latane luki itp).

0

Użycie flag source i target spowoduje tylko, że w przypadku tej pierwszej sprawdzona będzie zgodność ze standardem języka w danej wersji np. nie używasz genericsów w source 1.4, a w przypadku tej drugiej wygenerowanie innego major version w pliku class.

Kompilator w przypadku użycia flagi target nie sprawdza m.n. czy w danej wersji javy była dostępna dana metoda ani też nie kontroluje czy dany interfejs/klasa jest dostępna w danej wersji JVM.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.