Каков наилучший способ добавить функцию самообновления в приложение Java Swing? - PullRequest
12 голосов
/ 16 октября 2008

Я пытаюсь найти способ добавить функцию самообновления в приложение Java / Swing, над которым я работаю.

По сути, у меня есть куча jar-файлов с дополнительными функциями, которые можно повторно развертывать для установленных пользователей при их изменении. Ничего сложного, просто проверьте, выпущена ли новая версия, загрузите их по HTTP, а затем при необходимости предложите перезапустить приложение для пользователя.

Я посмотрел на веб-старт, и он мог работать. Но это конкретное приложение делает некоторые интересные вещи с загрузкой классов и настройками памяти GC, которые не выглядят так, как будто они поддерживаются через веб-запуск, или, по крайней мере, усложнят ситуацию. (Это измененная сборка JMeter)

Я также пошел по пути добавления в этот обработчик плагина http://swing -fx.blogspot.com / 2008/06 / add-auto-update-and-plugins-to-your.html, но это очень альфа, и он пытается сделать слишком много с обычными ошибками, которые вы получаете с альфа вещами.

Ответы [ 6 ]

6 голосов
/ 16 октября 2008

Я сделал то же самое. Но это было давно, поэтому сегодня, вероятно, есть лучшие инструменты.

Я обнаружил, что мне нужен был загрузчик. В основной программе загрузчика не было jar-файлов приложения в classpath. Сначала он загружает обновление, если требуется, а затем создает пользовательский загрузчик классов с jar-файлами приложения в пути к классам и вызывает метод main основного класса приложения. Это не очень сложно. IIRC Мне нужно было сделать это, потому что банки не могли быть перезаписаны в окнах, если они уже были в classpath.

Надеюсь, это поможет.

4 голосов
/ 16 октября 2008

Обновления, плагины, разделение задач и т. Д. - это как раз то, о чем OSGi - вы можете взглянуть на это. Он не будет бесплатным (читай: с крутой начальной кривой обучения, особенно когда вы в настоящее время используете приемы загрузки классов), по крайней мере, есть хорошие реализации с открытым исходным кодом (felix - см. felix.apache.org , equinox - см. www.eclipse.org и другие)

Для этих реализаций доступны автообновители - если вы правильно напишите свои модули, вы сможете обновить их во время выполнения без перезапуска.

4 голосов
/ 16 октября 2008

6 лет назад у нас было свинг-приложение, которое самообновлялось. как вы предложили,

1) скачал последние баночки по http,
2) скопировал их в папку.
3) поскольку приложение Swing запускается с использованием файла .BAT, после того, как пользователь сказал «ДА», мы закрываем приложение Swing и ищем любые файлы в папке обновления. если да, запустите другой файл .BAT, чтобы скопировать НОВЫЕ файлы JAR в нужный каталог.
4) Затем снова запустите приложение Swing.

1 голос
/ 17 октября 2008

Java Web Start - хороший выбор. Материал GC не важен. Загрузка классов может быть проблемой. Но когда вы получили доверие от пользователя, вы можете предоставить AllPermisions, и вы сможете выполнять пользовательскую загрузку классов. Может быть, будет полезно пересмотреть классные вещи с загрузкой классов. Это действительно необходимо? Или посмотрите на NetBeans. Нужно найти вдохновение для автообновления.

1 голос
/ 16 октября 2008

Я бы определенно сначала попробовал Webstart. У нас был большой успех при запуске даже ранних приложений Eclipse RCP с использованием Webstart, и вы, вероятно, не можете получить более прикольные проблемы с загрузкой классов, чем с инфраструктурой OSGI (Eclipse Equinox).

Не могли бы вы дать более подробную информацию в своем вопросе о подходе к загрузке классов?

Относительно ГХ и других настроек виртуальной машины: их легко указать в файлах JNLP (Java Network Launching Protocol), используемых Webstart для запуска приложений.

1 голос
/ 16 октября 2008

Полагаю, вам следует еще раз взглянуть на Java WebStart или, по крайней мере, подробно описать "фанки загрузки классов", которые, по вашему мнению, могут вызвать проблемы (поскольку это может также вызвать проблемы с любым предложенным здесь решением).

IIRC, вы можете установить параметры командной строки, используя Java WebStart (http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...