2008-10-16 4 views
12

Próbuję znaleźć sposób na dodanie funkcji samoaktualizacji do aplikacji Java/Swing, nad którą pracuję.Jaki jest najlepszy sposób dodania funkcji samoaktualizacji do aplikacji Java Swing?

Zasadniczo mam kilka plików JAR z dodatkowymi funkcjami, które zostaną ponownie wdrożone dla zainstalowanych użytkowników po ich zmianie. Nic skomplikowanego, wystarczy sprawdzić, czy nowa wersja została wydana, pobrać je przez HTTP, a następnie opcjonalnie zaoferować ponowne uruchomienie aplikacji dla użytkownika.

Spojrzałem na webstart i mogło działać. Ale ta konkretna aplikacja robi fajne rzeczy z klasowymi ustawieniami pamięci i GC, które nie wyglądają tak, jakby były obsługiwane przez webstart, lub przynajmniej komplikują sprawę. (To jest manipulowane kompilacji JMeter)

ja też zszedł na drogę dodając w tym obsługi wtyczki http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html, ale jest bardzo alfa i stara się zrobić zbyt wiele z typowych błędów można uzyskać z alfa rzeczy.

Odpowiedz

6

Zrobiłem dokładnie to samo. Ale to było dawno temu, więc prawdopodobnie są dziś lepsze narzędzia.

Okazało się, że potrzebuję ładowacza. Program główny programu ładującego nie zawierał słojów aplikacji w ścieżce klas. Najpierw pobrał aktualizację, a następnie utworzył niestandardowy program ładujący klasy z jarami aplikacji w ścieżce klasy i wywołał główną metodę głównej klasy aplikacji. To nie jest bardzo skomplikowane. IIRC musiałem to zrobić, ponieważ słoiki nie mogły zostać nadpisane w oknach, jeśli były już w ścieżce klasowej.

Mam nadzieję, że to pomoże.

+0

To wydawało się najłatwiejszą metodą. Zachowałem plik XML na serwerze, a jego replika lokalnie zawiera listę wszystkich plików do aktualizacji i numer wersji. Szybki i prosty, ale działa. – madlep

4

Mieliśmy aplikację do swingowania 6 lat temu, która miała własną aktualizację. jak zasugerowałeś, 1) pobrał najnowsze słoiki za pośrednictwem http,
2) skopiował je do folderu.
3) od momentu uruchomienia aplikacji do swingowania przy użyciu pliku .BAT, po tym, jak użytkownik odpowie "TAK", zamknę aplikację do przechylania i poszukaj plików w folderze aktualizacji. jeśli tak, uruchom inny plik .BAT, aby skopiować NOWE JARY do wymaganego katalogu.
4) następnie uruchom ponownie aplikację do przechylania.

1

Zdecydowanie pierwszy wypróbuję WebStart. Odnieśliśmy wiele sukcesów, uruchamiając nawet wczesne aplikacje Eclipse RCP, korzystając z WebStart, i prawdopodobnie nie można uzyskać bardziej klasycznych zadań związanych z ładowaniem klas niż w środowisku OSGI (Eclipse Equinox).

Czy mógłbyś podać nieco więcej szczegółów na temat swojego podejścia do ładowania klas?

Odnośnie GC i innych ustawień VM: są one łatwe do określenia w plikach JNLP (Java Network Launching Protocol) używanych przez WebStart do uruchamiania aplikacji.

+0

Czy możesz podać link do aplikacji RCP? – Liam

+0

Masz na myśli aplikację RCP, która może być webstartowana? Te, nad którymi pracowałem, są przeznaczone wyłącznie do zastosowań korporacyjnych typu intranet, dlatego nie są dostępne w Internecie. –

4

Aktualizacje, wtyczki, separacja problemów itp. Są dokładnie tym, o czym jest OSGi - możesz chcieć rzucić na to okiem.To nie przyjdzie za darmo (czytaj: ze stromym początkowym krzywej uczenia się, zwłaszcza gdy używasz classloading sztuczek) przynajmniej istnieją implementacje open source (Felix - zobacz felix.apache.org, równonoc - patrz www.eclipse.org i inne)

W przypadku tych wdrożeń dostępne są autopróbowniki - jeśli poprawnie napiszesz swoje moduły, możesz zaktualizować je w czasie wykonywania bez ponownego uruchamiania.

1

Java Web Start to dobry wybór. Rzeczy GC nie są ważne. Klasy może być problem. Ale kiedy otrzymasz zaufanie od użytkownika, możesz przyznać AllPermisions i będziesz mógł wykonywać niestandardowe ładowanie klas. Może dobrze będzie ponownie przemyśleć funky z klasą. To naprawdę konieczne? Lub spójrz na NetBeans. Należy znaleźć inspirację do automatycznej aktualizacji.

Powiązane problemy