2009-08-05 5 views
1

私は自己更新アプリケーションを作成しています。初めて実行すると、クライアントのコンピュータにネイティブライブラリがインストールされるため、毎回ダウンロードする必要はありません。インストールされているライブラリのバージョンが新しい必要最小限よりも古いことが検出されると、新しいバージョンがダウンロードされてインストールされます。フルブラウザを再起動せずにJavaアプレットにロードされたダイナミックライブラリを置き換えるにはどうすればよいですか?

問題は、ユーザーがブラウザーを閉じて再起動するまで(タブ、ブラウザ全体ではなく)、新しいライブラリーがJavaによって実際に使用されていないことです。これは私が避けようとしているものです。ユーザーがページを更新する必要がある、または閉じてもう一度開く必要がある場合は問題ありません。

アプレットが起動するたびに、インストールされているライブラリを一時フォルダにコピーしてから、そのコピーを常に読み込んでみてください。ここに誰もこれをやったことがありますか?良いアイデア?オペレーティングシステムはLinux、JDK 1.5、Firefoxです。

ありがとうございます!

答えて

1

これは、まさにこのバグレポートで説明した状況である: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039 (報告書は、それがWindowsに適用されると言うが、それは実際のJavaの問題だ)

JavaコードはネイティブDLLをアンロードするための方法はありませんVMが終了するまでDLLがロードされると、JVMが存続する間存在し、VMはそのロードが1回だけ確実に行われるようにします。

あなたのシナリオが動作するのを見るための唯一の方法は、のdllがロードされる前に何らかの形でバージョンチェックと更新を行うことができる場合です。それが使用されると、あなたはそれについています。

0

Javaクラスは、それらを所有するクラスローダーをアンロードすることによってのみアンロードできます。 JNIライブラリは所有クラスに依存するため、ライブラリを所有するクラスのクラスローダをアンロードする必要があります。

JNIライブラリとインターフェイスするクラスに対してURLClassLoaderをインスタンス化し、そのクラスのインスタンスをリフレクションで作成してみてください。アンロードするときは、新しいバージョンのライブラリを参照する更新されたJARから新しいクラスローダーを作成します(異なるライブラリファイル名を使用するので、GCが古いものを処理するまで両方のバージョンを同時にロードできます)

関連する問題