Dalam aplikasi Eclispe RCP, apakah ada cara untuk memeriksa apakah perpustakaan asli tertentu tersedia di sistem saat ini?
Menggunakan System.loadLibrary("myLib"); dan kemudian menangkap UnsatisfiedLinkError mengakibatkan bundel lain tidak dapat menggunakan perpustakaan, karena ini akan menyebabkan kesalahan "Perpustakaan sudah dimuat oleh pemuat kelas lain".
Saya telah menemukan solusi untuk masalah ini di internet yang menggunakan pemuat kelas khusus, yang kemudian memuat perpustakaan dan kemudian pemuat kelas tersebut dikumpulkan dengan System.gc(), yang juga akan membongkar perpustakaan sehingga dapat dimuat lagi dengan bungkusan lain.
Namun ada kelemahannya:
- Ini membutuhkan banyak kode khusus
- Menangkap UnsafisfiedLinkError agak menakutkan
- Katakanlah Bundle1 memuat perpustakaan untuk memeriksa ketersediaan. Kemudian Bundle1 membongkar perpustakaan dan Bundle2 memuat perpustakaan untuk benar-benar menggunakannya. Bundle2 tidak membongkar perpustakaan (karena tidak ada alasan untuk melakukannya). Kemudian, Bundle1 kembali ingin memuat perpustakaan untuk memeriksa ketersediaan. Ini sekali lagi akan menyebabkan UnsatisfiedLinkError.