【问题标题】:Running JAI in OSGi在 OSGi 中运行 JAI
【发布时间】:2010-12-02 08:48:43
【问题描述】:

我正在尝试在 OSGi 容器 (spring-dm) 中运行 Java 高级成像 (JAI)。我可以访问 JAI 库,但在我第一次调用 JAI 时收到以下错误:

错误:无法加载 mediaLib 加速器包装类。继续纯 Java 模式。 出现在:com.sun.media.jai.mlib.MediaLibAccessor com.sun.media.jai.mlib.MediaLibLoadException

DLL 位于类路径中,并在我的清单中作为 Bundle-NativeCode 库引用。是否可以在 OSGi 中运行本机 JAI DLL?如果是这样,我需要做什么?

(编辑:澄清)

我下载了 Windows JAI 库并从下载包中提取了 JAR 和 DLL。

主祭:

清单版本:1.0 捆绑包名称:Java 高级成像 捆绑符号名称:javax.media.jai 捆绑版本:1.1.3 捆绑类路径:libs/, jai_codec.jar, jai_core.jar, mlibwrapper_jai.jar Bundle-RequiredExecutionEnvironment:JavaSE-1.6 Bundle-NativeCode:libs/mlib_jai_mmx.dll;操作系统名=WindowsXP;处理器=x86, 库/mlib_jai_util.dll;操作系统名=WindowsXP;处理器=x86, 库/mlib_jai.dll;操作系统名=WindowsXP;处理器=x86 出口包装:

【问题讨论】:

  • 信息不多。你从哪里得到 JAI 包?你自己滚的吗?本机 DLL 位于哪个类路径 - 包的类路径?我怀疑类可见性或加载本机 DLL 的机制的常见问题是使用平台定位库的方法(PATH、LD_LIBRARY_PATH、...)而不是从类路径中。

标签: java osgi jai


【解决方案1】:

Bundle-NativeCode 块的声明看起来不正确。根据 OSGi 规范(我强烈建议您下载它 - 它非常简单),应在同一子句中指定单个平台的所有库,以便将其更改为:

Bundle-NativeCode: libs/mlib_jai_mmx.dll; libs/mlib_jai_util.dll; libs/mlib_jai.dll; 
 osname=WindowsXP; 
 processor=x86

一般来说,如果您可以在其他地方找到它们,我不建议您滚动自己的捆绑清单(除了本机代码部分之外,这个清单非常简单)。在这种情况下,我在 Spring repository 找到了其中的 2 个。它不包括本机代码部分 - 可能是由于许可证问题。

【讨论】:

  • 谢谢,这行得通……似乎遇到了一个愚蠢的问题。一般来说,我正在制作的清单由 Eclipse PDT 管理——不幸的是,不支持本机代码(至少通过 GUI),而且我没有找到任何 JAI 代码捆绑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多