2008-10-16 7 views
12

Ich versuche herauszufinden, wie ich einer Java/Swing-Anwendung, an der ich arbeite, eine Selbstaktualisierungsfunktion hinzufügen kann.Was ist der beste Weg, um eine Java Swing-Anwendung um eine Selbstaktualisierungsfunktion zu erweitern?

Grundsätzlich habe ich eine Reihe von JAR-Dateien mit zusätzlichen Funktionen für die Neuinstallation bei den installierten Benutzern, wenn sie sich ändern. Nichts kompliziertes, überprüfen Sie einfach, ob eine neue Version veröffentlicht wurde, laden Sie sie über HTTP herunter und bieten Sie dann optional an, die App für den Benutzer neu zu starten.

Ich habe Webstart angesehen, und es könnte funktionieren. Aber diese spezielle App macht einige funky Sachen mit Classloading und GC-Speichereinstellungen, die nicht so aussehen, als ob sie über Webstart unterstützt werden, oder zumindest die Dinge komplizieren werden. (Es ist ein Tweaked Build von JMeter)

Ich ging auch die Straße des Hinzufügens in diesem Plugin-Handler http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html, aber es ist sehr Alpha, und versucht, zu viel mit den üblichen Bugs Sie mit Alpha-Sachen zu tun.

Antwort

6

Ich tat genau dasselbe. Aber das war lange zurück, so dass es heute wahrscheinlich bessere Werkzeuge gibt.

Was ich herausgefunden habe, war ein Lader. Das Loader-Hauptprogramm hatte die App-Jars im Klassenpfad nicht. Es hat bei Bedarf zuerst ein Update heruntergeladen und dann einen benutzerdefinierten Klassenlader mit den App-Jars im Klassenpfad erstellt und die Hauptmethode der Anwendungsmauptklasse aufgerufen. Es ist nicht sehr kompliziert. IIRC Ich musste dies tun, weil die Gläser in Fenstern nicht überschrieben werden konnten, wenn sie bereits im Klassenpfad waren.

Hoffe, das hilft.

+0

Das schien der einfachste Weg zu sein. Ich habe eine XML-Datei auf dem Server und eine Kopie davon lokal gespeichert, die alle zu aktualisierenden Dateien und eine Versionsnummer auflistet. Schnell und einfach, macht aber den Trick. – madlep

4

hatten wir eine Swing-App vor 6 Jahren, die Selbst-Update hatte. wie Sie vorgeschlagen,

1) es heruntergeladen die neuesten Gläser über http,
2) kopiert sie in einen Ordner.
3) Da die Swing-App mit einer .BAT-Datei gestartet wird, nachdem der Benutzer JA gesagt hat, schalten wir die Swing-App aus und suchen nach Dateien im Update-Ordner. Wenn ja, starten Sie eine andere .BAT-Datei, um die NEW JARs in das erforderliche Verzeichnis zu kopieren.
4) Starten Sie dann die Swing App.

1

Ich würde Webstart definitiv erstmal ausprobieren. Wir hatten viel Erfolg damit, sogar die frühen Eclipse-RCP-Apps mit Webstart zu starten, und Sie können wahrscheinlich nicht mehr flippige Classloading-Probleme bekommen als mit dem OSGI-Framework (Eclipse Equinox).

Können Sie vielleicht etwas detailliertere Angaben zu Ihrer Classloading-Methode machen?

In Bezug auf die GC und andere VM-Einstellungen: Diese sind in Ihren JNLP-Dateien (Java Network Launching Protocol), die von Webstart zum Starten von Apps verwendet werden, einfach zu spezifizieren.

+0

Könnten Sie einen Link zu einer RCP-App geben? – Liam

+0

Meinst du eine RCP-App, die im Web gestartet werden kann? Die, an denen ich gearbeitet habe, sind alle für Intranet-Unternehmensanwendungen, also nicht im Internet verfügbar. –

4

Updates, Plugins, Trennung von Anliegen usw. sind genau das, was OSGi ist - Sie möchten vielleicht einen Blick darauf werfen.Es wird nicht kommen frei (sprich: mit einer steilen anfänglichen Lernkurve, vor allem, wenn Sie gerade Classloading Tricks sind) zumindest gibt es gute Open-Source-Implementierungen (felix - siehe felix.apache.org, Tagundnachtgleiche - siehe www.eclipse.org und andere)

Für diese Implementierungen sind Autoupdater verfügbar - wenn Sie Ihre Module richtig schreiben, ist es möglich, zur Laufzeit ohne Neustart zu aktualisieren.

1

Der Java Web Start ist eine gute Wahl. Das GC-Zeug ist nicht wichtig. Classloading könnte ein Problem sein. Wenn Sie jedoch vom Benutzer vertrauenswürdig sind, können Sie AllPermisions erteilen und benutzerdefinierte Klassenladevorgänge durchführen. Vielleicht ist es gut, funky Sachen mit Classloading zu überdenken. Es ist wirklich notwendig? Oder sehen Sie sich NetBeans an. Es sollte Inspiration für die automatische Aktualisierung gefunden werden.

Verwandte Themen