我有一个使用jnlp作为启动器的应用程序 . 它使用Sigar库,这些库需要动态加载的本机库以用于特定于平台的代码 .
出于调试的目的,我有两个JNLP文件,一个使用file:urls引用代码库,另一个使用http:urls . http urls指向localhost apache,它正确地提供文件 . 我可以看看JNLP在启动过程中通过apache日志下载它们,所以我知道这些文件正确地进入我的应用程序 .
以下是两个代码库标记
codebase="file:/Users/siberian/Documents/workspace_mnis/MNIS/localhost/"
href="file:/Users/siberian/Documents/workspace_mnis/MNIS/localhost/minis.jnlp"-->
和codebase =“http:// localhost /”href =“http://localhost/mnis.jnlp”
如果我双击文件:版本它工作正常 . 如果我通过浏览器加载它可以正常工作 .
如果我双击或浏览器加载http:版本,则无法找到包含此错误的动态库:
JNLPClassLoader: Finding library liblibsigar-universal64-macosx.dylib.dylib
[AWT-EventQueue-0] DEBUG Sigar - no libsigar-universal64-macosx.dylib in java.library.path
org.hyperic.sigar.SigarException: no libsigar-universal64-macosx.dylib in java.library.path
现在,有趣的是,它说它无法找到liblibsigar-universal64-macosx.dylib.dylib的文件
注意前缀额外'lib'和后缀额外'.dylib' .
Sigar / vmware论坛上有关于没有解决方案的类似问题的说明 .
核心问题是,为什么这在文件中的表现不同:context vs http:context?
另外值得注意的是,我已经签名并取消了我的所有文件,没有签名错误,我可以看到 .
这里有一些答案提示:Java Webstart with Tibco Native Libs
但它在一个文件中工作:上下文让我觉得别的东西是错的 .
另外:JaNeLa告诉我一切都很好
1 回答
JNLP和Sigar类加载器不能很好地协同工作 . 这是拼凑在一起但在Windows和Mac环境中都能很好地工作 . VMWare论坛提示这样的答案,但没有人把它放在一起 . 对于JNLP,您需要根据您的体系结构专门执行loadLibrary . 在非JNLP上下文中,Sigar透明地处理它,但JNLP以某种方式中断,需要这种手动平台选择 .
只需将此方法放入您的类中,并在调用新的Sigar()之前调用它,它应该正常工作 . 这个解决方案需要公共图书馆 . 您可以轻松地为Linux和其他备用平台支持扩展它 .