自分自身を更新する機能を持つアプリケーションがあります。ダウンロードしたjarファイルをネットからダウンロードし、使用しているjarを置き換えて、ダウンロードしたアプリケーションでこのアプリケーションを実行しようとします。 しかし、アプリケーションがまだ実行されているため、ファイルがウィンドウによってロックされているため、できません。Javaのウィンドウで使用/ロックされているファイルを削除する方法
誰かが回避策を知っていますか?
自分自身を更新する機能を持つアプリケーションがあります。ダウンロードしたjarファイルをネットからダウンロードし、使用しているjarを置き換えて、ダウンロードしたアプリケーションでこのアプリケーションを実行しようとします。 しかし、アプリケーションがまだ実行されているため、ファイルがウィンドウによってロックされているため、できません。Javaのウィンドウで使用/ロックされているファイルを削除する方法
誰かが回避策を知っていますか?
これは一般的な解決策の1つです。別のプログラム。あなたはそれが更新されたときにFirefoxを再起動しなければならないことに気づいたことがありますか?それは別のプロセス(updater.exe)がファイルを更新してからFirefoxを再起動するためです。
このアプローチを試すことができます。途中で見られる唯一の障害は、MAINプログラムを自動化しようとしていることです。これを行うためのポータブルな方法は、メインアプリケーションがローカルソケットを介してkillシグナルを待つことだけです。アップデータはローカルネットワーク経由でコマンドを送信できます。あなたが考慮する必要があるもう一つの点は、アップデーターを別のJavaプロセスで実行する必要があることです。主プログラムが新しいUpdaterオブジェクトを作成するだけの場合、UpdaterはメインプログラムのJVMと共存し、正方形に戻ります。
ここで行うべき正しいことは、の再起動アプリケーションです。イベントランタイムでjarファイルを更新できる場合は、クラスのバージョン、クラス、実装などが異なるため、すべてのエラーが発生する可能性があります。
これを行う一般的な方法は、更新プログラムが表示されたときにメインプログラムによって呼び出される個別のアップデータを作成することです。この時点で、メインプログラムは新しいプロセスでアップデータを起動して終了できます。あなたはメインプログラムが終了し、更新されたファイルをダウンロードしてコピーし、メインプログラムを再起動するのを待つことができます。
これは問題ですはすでにOSGiによってに解決されています。
実際の問題は、新しいjarバージョンを読み込まないことです。これは、ファイルロックを解除する独自のクラスローダーで行うことができます。実際の問題はhandle instances of different versions of the same classへの方法です。
再起動してもこれらの問題は発生しません。 1つのアプリケーションで異なるJARバージョンが本当に必要な場合は、OSGiを使用してください。