Java, SWT i uruchomienie z pliku JAR (Ubuntu i Windows)

21 07 2008

Pokombinowałem troche, poczytałem fora internetowe poczytałem różne artykuły na temat tego w jaki sposób uruchomić stworzony przez Eclipse plik JAR.

Wszystko na marnę.

Dziś rano jednak pomyślałem, że musi być jakieś prostsze rozwiązanie – bo widziałem jedno które miało 10k kroków, a wyjaśnione było tak, że zgubiłem się już po drugim.

Ubuntu

Moim problemem w Linuxie było to, że nie java.library.path nie zawierała ścieżki do Java Native Interface (JNI) zatem wystarczyło tylko dodać do polecenia uruchomieniowego jedną rzecz:

java -Djava.library.path=/usr/lib/jni helloworld.jar

Takie wklepywanie jest jednak uciążliwe, a przy uruchamianiu aplikacji przez dwuklik na ikonie – wręcz niemożliwe. Dlateg – jak zawsze – można (nawet trzeba) to sobie uprościć.

Okazuje się, że wystarczy ustawić zmienną LD_LIBRARY_PATH tak aby zawierała wspomnianą ścieżkę /usr/lib/jni.

“Wystarczy” to za mało. W ubuntu niełatwo jest ustawić tę zmienną – nie potrafię wyjaśnić dlaczego tak jest bo sam tego nie wiem. Wiem natomiast, że zadziałało utworzenie w katalogu użytkownika pliku .bashrc i wpisanie do niego nastepującej treści pomogło:

LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":/usr/lib/jni
export LD_LIBRARY_PATH

Od teraz po wykonaniu polecenia env w liście zmiennych widać LD_LIBRARY_PATH ustawioną w odpowiedni sposób.

Windows

W windowsie z kolei wszystko “prawie” działa. Problemem nie są dzielone biblioteki tylko brak pewnych rzeczy w pliku jar z programem. U mnie objawiało się to okienkiem informującym mnie, że nie można znaleźć głównej klasy do uruchomienia czy coś w ten deseń. Tak czy inaczej – nie to było problemem.

Po wyeksportowaniu programu z Eclipse do pliku *.jar i otworzeniu go w jakimś WinZIPie czy innym programie do rozpakowywania znajduje się tam kadalog META-INF, pliki .classpath i .project oraz pliki *.class (u mnie był jeden – Main.class). Te pliki nie są interesujące. Bardziej ciekawe jest to co dzieje się w katalogu META-INF. Jest tam plik MANIFEST.MF.

Otworzyłem MANIFEST.MF i moim oczom ukazało się coś takiego:

Manifest-Version: 1.0
Main-Class: Main

Wpadłem więc na pomysł, aby ściągnąć z www.eclipse.org/swt wersję SWT dla Windows i ze ściągniętego ZIPa wydostać plik swt.jar. Później wystarczy wrzucić go do naszego pliku *.jar, który chcemy uruchomić (do głównego “katalogu” – tam gdzie pliki *.class) i dodać do pliku MANIFEST.MF jedna linię:

Class-Path: swt.jar ./

I tyle wystarczy. Po tym zabiegu wystarczyło tylko dwa razy kliknąć na plik *.jar i uruchamiało się okienko o które chodziło.





Java

20 07 2008

Obudziłem się dziś rano i postanowiłem… pouczyć się Javy ;)

Jak dotąd skutecznie omijałem ten język wszelkimi sposobami ale w końcu i tak się go nauczę gdyż będę miał o nim zajęcia w ciągu nastepnego roku. Uznałem, że lepiej samemu trochę już zaznajomić się z nim ponieważ później w galopie może być ciężko…

Od rana pokombinowałem trochę z aplikacjami konsolowymi pokroju Hello World, ale szybko mi się znudziły. Teraz rzuciłem się na GUI i realizuję je za pomocą SWT.  Kod piszę używając Eclipse w Ubuntu 8.

O ile CTRL+F11 działa bezproblemowo o tyle nie potrafię zmusić go do stworzenia pliku JAR z którego da się odpalić bezproblemowo mojego programu z okienkiem.

Trzeba nad tym trochę popracować :)





Elektronika w samochodzie

17 07 2008

Ostatnio dobrałem się do samochodu brata (gdyż on chwilowo [a może i nie chwilowo] jeździ innym) i postanowiłem dokonać drobnych napraw związanych z elektrycznością w środku.

Brat utrzymywał, że gdzieś w samochodzie było spięcie i dlatego też nie wymienił bezpiecznika ponieważ i tak by się zaraz przepalił. Postanowiłem to sprawdzić – w końcu w całym samochodzie jest raczej niewiele kabli w porównaniu do tych za deską rozdzielczą i koło radia i zapalniczki. Rozłożyłem więc 3/4 przodu aby mieć w miarę swobodny dostęp do kabli i co zobaczyłem? Wesoło dyndające niezaizolowane kable wszelkiej maści. Dlaczego więc brat mówił że spięcie jest gdzie indziej? Chyba nigdy się nie dowiem. Po odizolowaniu kabli od siebie okazało się, że nagle bezpiecznik przestał się przepalać i wszystko zaczęło działać.

Skoro już udało mi się wielkim nakładem pracy sprawić aby do kabiny popłynął prąd to pomyślałem, że może uda mi się wykombinować coś z radiem. Powstaje pytanie – a co z nim? Otóż w samochodzie tym radio było włożone tylko po to żeby zakryło dziurę, która powstałaby po jego wyjęciu. Chociaż nie wiem co jest gorsze – zwykła dziura po radiu czy przerażający panel radia bez niektórych przycisków…

Tak czy inaczej wiedziałem, że w domu jest jeszcze jedno radio: Blaupunkt Boston CC20. Radio mające chyba tyle lat co ja ;) Potrafi tylko odbierać stacje i odtwarzać kasety. Ale to już wystarczy. Można przecież kupić kasety z kabelkiem które można podłączyć do MP3 czy odtwarzacza CD. Problem z tym radiem jest taki że jest ono zabezpieczone kodem, który oczywiście posiadam, ale nie wiem którym przyciskiem się go zatwierdza ;) Po błędnym wpisaniu kodu radio blokuje się na dość długi czas i musi być stale pod napięciem.

Zabezpieczenie kodem przed kradzieżą jest dobrym pomysłem o ile radio jest jeszcze coś warte. Prawdopodobnie teraz tego radia już nikt nie bedzie potrzebował i nikt go nie kupi zatem nie ma potrzeby go kraść.

Na szczęście są sposoby na zmianę kodu, a nawet jego usunięcie tak aby radio włączało się bez zapytania. Problem polega na tym, że do tego potrzebny jest programator EPROM. Takiego urządzenia nie mam więc pozostaje mi udać się z tym do fachowców i zapłacić kilka złotych.

Pytanie tylko czy nie kupię w tej cenie jakiegoś innego przedwojennego radia ^^





Nowa zabawka

13 07 2008

Ostatnio niewiele czasu mogłem poświęcać swoim ulubionym zajęciom ponieważ ciągnęła mi się w nieskończoność sesja… Niestety nie wszystko udało się pokonać za pierwszym razem i spotkam się z 2 profesorami ponownie ;) Ale nie o tym chciałem pisać!

Chciałem napisać o tym, że od wczoraj ( tj. 12.07.08 ) jestem posiadaczem Sony Ericsson’a K800i – mojej nowej zabaweczki ^^

Najbardziej interesującym mnie featurem nowego sprzętu jest “Zdalne Sterowanie” przez Bluetooth. Jest to chyba standardowa opcja nowszych telefonów SE. Pozwala ona sterować zdalnie (jakby trudno było się domyślić) przeróżnymi urządzeniami, które obsługują HID (Human Interface Device).

Standardowo w SE są 3 możliwości obsługi PC (działające oczywiście w Windows)

  • Desktop – możemy kontrolować ruch myszki
  • MediaPlayer – kontrolujemy Windows Media Player
  • Presenter – możemy kontrolować wyświetlanie prezentacji (pewnie w MS PP)

Teraz pójdę się pobawić nową zabawką i Ubuntu i zobaczymy co z tego wyniknie ;)