Eclipse RCP: Periksa Perpustakaan Asli

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:

  1. Ini membutuhkan banyak kode khusus
  2. Menangkap UnsafisfiedLinkError agak menakutkan
  3. 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.

person Community    schedule 14.02.2013    source sumber


Jawaban (1)


iklan 3.) Pertama-tama saya akan menghindari membiarkan bundel memuat perpustakaan sistem secara acak. Mungkin Anda bisa mengemas penanganan perpustakaan sistem dan semua aksesnya dalam satu paket layanan?

Saya setuju, menangkap ERROR tidak hanya menakutkan, mungkin juga bukan sesuatu yang harus kita lakukan sama sekali. Kesalahan adalah kesalahan VM, dan itu adalah sesuatu yang biasanya menyebabkan restart vm Anda -atau aplikasi dalam kasus Anda- untuk menjamin operasi yang stabil.

Bagi saya, memeriksa apakah perpustakaan tersedia atau tidak sama dengan memeriksa apakah sumber file ada atau tidak. Jika perpustakaan adalah sesuatu yang sangat dinamis dalam konteks aplikasi Anda, Anda dapat membiarkan pengguna menelusuri perpustakaan dan membiarkan aplikasi mengetahui lokasinya. Jika tidak ada yang namanya pengguna, tidak bisakah Anda mencari file di jalur mesin klien?

person gia    schedule 02.09.2013