【问题标题】:Local alternative to JNLP file?JNLP 文件的本地替代方案?
【发布时间】:2010-01-09 05:47:15
【问题描述】:

尽我所能,我无法让 JNLP 文件在本地运行(通过双击)。即使我指定相对于 jnlp 文件的 jar 文件,这似乎也是一个问题。我收到以下错误:

href 字段无效 值:helloworld.jar

即使 JNLP 文件与 helloworld.jar 位于同一文件夹中,也会发生这种情况。我已经进行了搜索,这是一个始终如一的问题,尤其是对于想要将应用程序打包到 CD 上并使用 JNLP 的人来说。 Sun 提供的唯一“解决方案”是通过命令行指定代码库的能力,但这并没有太大帮助。我不明白他们为什么不假设或允许代码库是“。”或“文件://”。 - 我在 jnlp 标记的代码库参数(文件内部)中尝试了这些东西,但没有任何效果。


使用 JNLP 文件对我来说非常方便,因为我不需要担心平台检测、本地库甚至主要的 JOGL jar 文件;我只是简单地添加了这一行,一切都为我完成了:

<extension name="JOGL" href="http://download.java.net/media/jogl/builds/archive/jsr-231-2.0-beta10/webstart/jogl-all-awt.jnlp" />

我希望找到可以做同样事情的东西。如果没有,我可以手动(或使用 Ant)获取 JOGL jar 文件,这没什么大不了的;这只是 JNLP 为我做的事情之一,我真的会想念。


什么是 JNLP 文件的最佳替代品,让我在本地使用(即双击运行)?有什么这么优雅的吗,还是我只需要为 Linux 编写一个 shell 脚本,为 Windows 编写一个批处理文件,然后让 Ant 检测并下载适当的 JOGL jars?

【问题讨论】:

  • 如果有其他人比下面的答案更好,请说出来!我仍然很想知道是否可以从本地文件系统运行 JNLP 文件。但是,经过一些研究,我认为这是不可能的,因此我提出了自己的建议;一对脚本(run.bat 和 run.sh),我的 Ant 脚本使用条件标签并下载和解压缩正确的 JOGL jar。我很快就会提交一个包含 Ant 代码的答案。

标签: java jogl jnlp


【解决方案1】:

我使用过这样的 .jnlp 文件在本地启动 Java Web Start 软件

  1. 像这样指定代码库: &lt;jnlp spec="1.0+" codebase="file://localhost/X:/path/to/jnlp/" href="software.jnlp"&gt;

  2. 列出具有相对路径的资源:@​​987654323@

  3. 最后告诉 Web Start 在哪里可以找到标有 main="true" 的 jar 中的软件入口点:&lt;application-desc main-class="com.example.Main" /&gt;

远程部署时唯一需要更改的是代码库参数。

【讨论】:

  • 这不需要在 localhost 上运行某种 Web 服务器或文件服务器来解析该路径?
  • 否,但仍需要 localhost 部分。没有它就不行,如果你把它放进去就可以了。我花了半天时间才弄清楚:-)
  • 这真的很酷。我希望你在一月份我搞砸这个的时候就在附近。由于这是我一直在寻找的答案,因此我将接受的答案切换给您。 :)
  • 另外,您可以通过省略 codebase 属性在本地启动。现在是可选的:download.oracle.com/javase/6/docs/technotes/guides/javaws/…
  • 对我来说,这仅在我将代码库更改为:file:///X:/path/to/jnlp/(所以三个正斜杠,然后是驱动器号)时才有效
【解决方案2】:

只需从jnlp 标记中删除属性codebasehref

<jnlp spec="1.0+">

从 java 1.6u18 开始支持。

【讨论】:

    【解决方案3】:

    Java 6 更新 10(不久前)改进了 JNLP 系统,但仍然很难调试(在 Java 控制台中启用完全跟踪,并单步执行 javaws 源代码。

    在你的情况下,我会加倍努力让它发挥作用。也许您会提供一个完整的 JNLP 文件来显示问题?

    【讨论】:

      【解决方案4】:

      为您的 jar 使用清单。在那里您可以定义要启动的主类和所需的库。请参阅清单规范中的 Main-class 和 Class-path 参数。

      【讨论】:

      • 这里的重点是让我只要双击jar文件就可以运行,对吧?
      • 我不相信 Manifest.MF 允许指定本地库的位置。
      • 我没有注意到需要使用本机库,但无论如何,有了 manifest 属性,这应该可以由 ant 管理,以提供特定于平台的依赖项/包。
      【解决方案5】:

      JNLP 是为网络启动(特别是 http(s))而设计的,如果没有网络,Java 实现肯定会很困惑。即使是像 eclipse 这样的成熟项目也坚持使用 .sh,.bat 选项。

      【讨论】:

      • 不一定... NetBeans 具有开箱即用的本地 JNLP 启动选项。另外,如果你看看@Shrike 的评论,你会发现当地的部门并不难。
      猜你喜欢
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多