"Java jest przenośna"

0

Przydarzyła się mi wczoraj pewna niepożądana sytuacja. Poszliśmy z kolegą oddać wersje beta pewnego projektu napisanego w Javie. Przy próbie zaprezentowania prowadzącemu programu okazało się, że program po prostu nie startuje. Po dwukrotnym kliknięciu na plik JAR pojawiał się nieprzyjemny komunikat: "Could Not Find The Main class. Program will exit".
Program był pisany pod NetBeansem 6.0.1 i uruchamiał sie u mnie na kompie pod JVM 1.6 bez problemu. Na kompie, na którym uruchomienie nie powiodło sie była z tego co pamiętam wersja JVM 1.42. Nie mamy tam możliwości jakoś studenci zaktualizowania wersji JVM.
W rezultacie usłyszeliśmy komunikat, ze zawsze trzeba przyjść wcześniej zobaczyć czy wszystko działa (nie sposób nie przyznać racji), ale również coś w stylu "Java jest najmniej przenosna...".
Jak to faktycznie jest z przenośnością Javy? Jak wystrzec sie takich błędów? Jest mozlwosc podpiecia pod plik wykonywalny Javy jakis dodatkowych, tak aby było wszystko co potrzeba i program mógł uruchamiać sie wszędzie?

Zapraszam do debaty na temat przenośności Javy i proszę o odpowiedzi jak rozwiazac tego typu problemhttp://www.ponikwa.pl

0

Wystarczy kompilować pod wersją nie nowszą niż na platformie docelowej i nie powinno być większych problemów.

0
Szczawik napisał(a)

Wystarczy kompilować pod wersją nie nowszą niż na platformie docelowej i nie powinno być większych problemów.

Jeszcze za bardzo nie jestem obeznany w tych sprawach czysto technicznych, na razie skupiałem sie na nauce programowania. Rozumiem ze nie piszesz o wersji netbeansa. Sugerujesz aby kompilować i sprawdzać pod starszą wersją JVM?

0

Klasy kompilowane wersją 1.6 nie "chodzą" nawet na kompie z 1.5.8. Lekarstwem jak napisał @Szczawik jest kompilacja na najstarszą wersję na jaką się da (wersja 1.6 dodała metody, których nie było w 1.5, jak z nich korzystasz to klops). W opcjach projektu można wskazać dla jakiej wersji JVM ma powstać program. Przy kompilacji ręcznej wskazanie wersji wygląda tak: javac -target 1.4 *.java.
Jak po podwójnym kliknięciu pojawia się komunikat o błędzie, to warto uruchomić konsolę i wpisać polecenie java -jar nazwaJara. Komunikaty na konsoli są duzo dokładniejsze.
pozdrawiam

0

Wykładowca "zna się" na javie. Java jest przenośna, ale nie jest w pełni kompatybilna wstecz. I tyle. Tak jak byś chciał kompilować programy wykorzystujące wszystkie nowości Dephi 7 na kompilatorze 5. Po prostu nie ruszy. W tym przypadku masz to samo. Stara JVM spowodowała mały problem. Rozwiązaniem jest użycie flagi -target w javac.

0

Netbeans ma nawet coś takiego jak "source level" w właściwościach ("properties") projektu.
Powinno to dać taki sam efekt, jak flaga -target.

0

@koziolek
java jest w pelni kompatybilna wstecz - oznacza to ze stary kod uruchomisz pod nowa java
to co robia koledzy to test kompatybilnosci wprzod - uruchomienie na starej javie metod z nowej, o ktorych ta stara nie ma jeszcze pojecia, a to co innego zupelnie
pozdro

0

pytania "zaczepne":
czy aby na pewno chodzi o roznice pomiedzy jvm? czy na pewno korzystales z klas, ktore wystepuja w wersji wyzszej niz 1.42 ? czy ten blad wystepuje na innym komputerze z wersja taka sama jak Twoja czyli 1.6.0_xx ? Zmierzam do tego, czy na pewno wszystkie pliki projektu sa tam gdzi trzeba. Bo jesli na innym kompie z taka sama wersja jvm masz takze ten blad, to chyba problem nie lezy w roznicach pomiedzy jvm. Ostatecznie blad "Could Not Find The Main class. Program will exit" to nie zawsze zla wersja wirtualnej maszyny. pozdrawiam :)

0

@hihihaha, skąd wiesz że koledzy korzystają z metod nowej javy ? Kod który można by skompilować wersją 1.2 skompilowany wersją 1.6 też się nie uruchomi na JRE 1.5.

0

@hihihaha, tró. Pomyliłem pojęcia. Bywa.

@skaluzka i tu mnie zastanowiłeś. Jeżeli całość jest w pliku jar to mogło się tak zdarzyć, że w trakcie jego automatycznego tworzenia dodany został katalog "jeden wyżej".
@riker, otwórz jara zipem i zobacz czy ci się struktura katalogów nie zmieniła i nie masz jakiegoś nad wymiarowego src lub czegoś w tym stylu.

0

Dzieki wielkie za wszystkie odpowiedzi.

@kamykadze Pisales o "source level" we właściwościah w NetBeans. Znalazlem "Source/Binary format" i to i ustawilem JDK 1.4, mam nadzieje ze bedzie działać :)

@skaluzka Raczej nie kozystalem z klas, ktore wystepuja w wersji wyzszej niz 1.42. Testowalem u mnie i u kolegi na 1.6 i dzialal bez problemu.

@bogdans Napisales ze jak plik skomipluje sie pod wersja przykladowo 1.6, to chodz nie zawiera zadnych nowych metod nie uruchomi sie juz na wersji niezej. Mysle (mam nadzieje) ze o to chodzi z tym bledem :)

@koziolek Jak otwieram plik jar winrarem to widze dwa katalogi. Jeden META-INF zawierajacy Manifest, a drugi pt. szczur (nazwa pakietu) i zawiera pliki ze wszystkimi klasami w moim projekcie. Nie wiem szczerze mowiac co powinno byc i czy czegos nie brakuje.

0
riker napisał(a)

@kamykadze Pisales o "source level" we właściwościah w NetBeans. Znalazlem "Source/Binary format" i to i ustawilem JDK 1.4, mam nadzieje ze bedzie działać :)

Tak, to to samo, nazwa się widzę nieco zmieniła od wersji 5.5 Netbeansa. Mam nadzieję, że pomoże. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1