Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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