使用JNLP将文件安装到主机上并确定结果路径

问题描述:

我正在开发一个应用程序(Sigar),通过单击链接可通过Web浏览器下载。该应用程序将监控机器信息,并且它需要一些库文件来执行此操作(例如libsigar-x86-linux.so,libsigar-x86-freebsd-5.so)。使用JNLP将文件安装到主机上并确定结果路径

我的计划是把本地文件到一个JAR第一,那么当应用程序与JWS下载,我会

  • 解压JAR文件,其中包括本地库到一个文件夹
  • 找到当前类路径,这是在应用程序运行时确定的。
  • 最后,将java.library.path设置为相对于类路径,以便可以找到我的本机库。

目前我正在使用此代码,以确定JAR的路径:

String path = MyClass.class.getProtectionDomain() 
    .getCodeSource().getLocation().getPath(); 

但我必须做一些错误的,因为返回的路径是Web服务的路径,而不是一个在当地环境。

任何人都可以指出我目前的计划有哪些错误?谢谢。

JNLP文件中的nativelib标签旨在处理您需要的任何本机库。

请参阅 JNLP File Syntax中资源标签的文档。

+0

此外,Java不太适合封装本机应用程序。如果你只想要一个可下载的Windows应用程序,.NET可能是包装技术的更好选择。 (ClickOnce也许?) – 2013-03-12 15:29:17

如上所述,jnlp中的本地库文件可能就是您所需要的。

但是,如果由于其他原因想要手动控制展开空间,则可以通过在jar内嵌入jar来实现。请参阅:Extract some content from jar-file downloaded with JWS

+0

我还没有测试,但我相信在Java WebStart中的SecurityManager不会允许尝试加载这些文件作为本地库。 – 2013-03-12 15:27:36

+0

我尝试过使用processbuider捆绑和启动一个.exe文件,当运行jnlp时不受限制。但havnt测试了加载dll,所以你可能是对的 – 2013-03-12 15:40:01