2008-10-16 2 views
12

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

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

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

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

ответ

6

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

Что я узнал, мне нужен был погрузчик. В основной программе загрузчика не было приложений в классе pathpath. Сначала он загрузил обновление, если это необходимо, а затем создал пользовательский загрузчик классов с помощью контейнеров приложений в пути класса и вызвал основной метод основного класса приложения. Это не очень сложно. IIRC Мне нужно было сделать это, потому что банки не могли быть перезаписаны в Windows, если они уже были в classpath.

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

+0

Это казалось самым простым способом. Я сохранил XML-файл на сервере, а его реплика локально перечисляла все файлы, которые нужно обновить, и номер версии. Быстро и просто, но делает трюк. – madlep 2008-10-18 01:03:28

4

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

1) он загрузил последние банки по http,
2) скопировал их в папку.
3) поскольку приложение swing запускается с использованием .BAT-файла, после того, как пользователь сказал ДА, мы закрыли приложение swing и искали любые файлы в папке обновления. если да, запустите другой .BAT-файл, чтобы скопировать новые JAR-файлы в требуемый каталог.
4) затем повторно запустите приложение поворота.

1

Я считаю, что вам следует снова взглянуть на Java WebStart или, по крайней мере, подробно описать «funky classloading», который, по вашему мнению, вызовет проблемы (так как это может также вызвать проблемы с любым предлагаемым здесь решением).

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

1

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

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

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

+0

Не могли бы вы дать ссылку на приложение RCP? – Liam 2008-10-16 11:58:59

4

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

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

1

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