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

StackOverflow https://stackoverflow.com/questions/207557

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top