Привет друзья Переполнения стека. У меня есть простая проблема, которой я боюсь, не имеет простого решения, и мне нужен совет относительно того, как продолжить двигаться. Я разрабатываю JAVA-приложение, упакованное как и исполняемый JAR, но он требует для изменения части его содержания файла JAR во время выполнения. На данном этапе я поразил проблему, потому что некоторая блокировка ОС предотвращение файла пишет в нее.
Важно, чтобы пользователь видел обновленную версию файла банки к этому времени выходы приложения, хотя я могу быть довольно гибким относительно того, как достигнуть этого. Чистое и эффективное решение очевидно prefereable, но мобильность является единственным трудным требованием.
Следующее является тремя подходами i, видят к решению проблемы, не стесняйтесь комментировать их или предлагать других.
Я знаю, что это - странный вопрос, но любая справка ценилась бы.
Один из вариантов:
Запишите программе измененную копию файла JAR.
Включите в файл JAR второй JAR с утилитой, которая при запуске удаляет исходный файл JAR и переименовывает измененную копию, чтобы она соответствовала оригиналу.
После выхода из вашей программы (и внесения изменений) извлеките эту утилиту и запустите ее в ее собственной JVM (используя Runtime.getRuntime (). Exec ()
). Утилита будет ждать, пока сработает блокировка исходного немодифицированного JAR, а затем выполнит свою работу и завершит работу.
Пользователю кажется, что файл JAR обновляется при выходе (или достаточно близко!).
Честно говоря, я думаю, что ваш подход неправильный. Это просто не подходит для способа развертывания Java по умолчанию. Ваши измененные файлы просто должны будут сохраниться в файле db или xml где-то - это ЕДИНСТВЕННЫЙ разумный подход.
Все что угодно - это просто «борьба с ветром» - вы можете с некоторыми трудностями заставить его работать, но это в конечном итоге укусит вас или клиента.