Eclipse RCP: проверьте нативную библиотеку

Есть ли в приложении Eclispe RCP способ проверить, доступна ли конкретная собственная библиотека в текущей системе?

Использование System.loadLibrary("myLib"); а затем перехват UnsatisfiedLinkError приводит к тому, что другие пакеты не могут использовать библиотеку, так как это приведет к ошибке «Библиотека уже загружена другим загрузчиком классов».

Я нашел решение этой проблемы в Интернете, в котором используется пользовательский загрузчик классов, который затем загружает библиотеку, а затем загрузчик классов собирает мусор с помощью System.gc(), который также выгружает библиотеку, чтобы ее можно было загрузить. снова другой связкой.

Однако есть недостатки:

  1. Требуется много пользовательского кода
  2. Поймать UnsatfisfiedLinkError несколько страшно
  3. Скажем, Bundle1 загружает библиотеку для проверки доступности. Затем Bundle1 выгружает библиотеку, а Bundle2 загружает библиотеку, чтобы фактически использовать ее. Bundle2 не выгружает библиотеку (поскольку для этого нет причин). Затем Bundle1 снова хочет загрузить библиотеку для проверки доступности. Это снова приведет к ошибке UnsatisfiedLinkError.

person Community    schedule 14.02.2013    source источник


Ответы (1)


объявление 3.) Прежде всего, я бы не стал позволять пакетам случайным образом загружать системные библиотеки. Может быть, вы можете упаковать обработку системной библиотеки и весь доступ к ней в пакет услуг?

Я согласен, поймать ERROR не только страшно, но, вероятно, это вообще не то, что мы должны делать. Ошибка — это ошибка виртуальной машины, и это то, что обычно приводит к перезапуску вашей виртуальной машины — или приложения в вашем случае — для обеспечения стабильной работы.

Для меня проверка доступности библиотеки аналогична проверке существования файлового ресурса. Если библиотеки являются чем-то очень динамичным в контексте вашего приложения, вы можете позволить пользователю просмотреть библиотеку и сообщить приложению, где она находится. Если нет такой вещи, как пользователь, не можете ли вы просто найти файл в пути к клиентской машине?

person gia    schedule 02.09.2013