Eclipse RCP:检查本机库

时间:2013-02-14 09:51:15

标签: java eclipse rcp

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

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

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

但是有一些缺点:

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

1 个答案:

答案 0 :(得分:0)

ad 3.)首先,我会避免让bundle随机加载系统库。也许您可以在服务包中打包系统库及其所有访问权限?

我同意,抓住 ERROR 不仅可怕,它可能不是我们应该做的事情。错误是VM错误,这通常会导致您的vm -or应用程序重新启动,以确保稳定运行。

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