【问题标题】:Eclipse RCP: Check for Native LibraryEclipse RCP:检查本机库
【发布时间】:2013-01-30 02:05:42
【问题描述】:

在 Eclispe RCP 应用程序中,有没有办法检查当前系统上是否有特定的本地库可用?

使用 System.loadLibrary("myLib");然后捕获 UnsatisfiedLinkError 会导致其他包无法使用该库,因为这会导致错误“库已被另一个类加载器加载”。

我在互联网上找到了解决此问题的方法,它使用自定义类加载器,然后加载库,然后使用 System.gc() 对类加载器进行垃圾收集,这也会卸载库,所以它可以被另一个包再次加载。

但也有缺点:

  1. 需要大量自定义代码
  2. 捕获 UnsatfisfiedLinkError 有点吓人
  3. 说 Bundle1 加载库以检查可用性。然后 Bundle1 卸载该库,而 Bundle2 加载该库以实际使用它。 Bundle2 不会卸载库(因为没有理由这样做)。然后,Bundle1 再次要加载库以检查可用性。这又会导致 UnsatisfiedLinkError。

【问题讨论】:

    标签: java eclipse rcp


    【解决方案1】:

    ad 3.) 首先,我会避免让捆绑包随机加载系统库。也许您可以将系统库的处理及其所有访问打包到一个服务包中?

    我同意,捕捉 ERROR 不仅可怕,而且可能根本不是我们应该做的事情。错误是一个虚拟机错误,这通常会导致您的虚拟机或您的应用程序重新启动,以保证稳定运行。

    对我来说,检查库是否可用类似于检查文件资源是否存在。如果库在您的应用程序上下文中非常动态,您可以让用户浏览库并让应用程序知道它在哪里。如果没有用户这样的东西,你不能简单地在客户端机器的路径中搜索文件吗?

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2011-04-29
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多