3

我有一个在 jnlp 中运行的小程序。我的单个 jar 文件已签名。每次启动 JNLP 客户端时,我都会接受权限提示。我可以获得 BasicService 但当我尝试遵循 URI 时它仍然会引发 url permission denied 异常:

file:///D:\temp\test.txt

该文件存在于我尝试过的所有 Windows 客户端计算机上,打开它没有安全问题。

在客户端上使用 32 或 64 位 JRE 时会出现此问题。服务器是 32 位的,但我认为这无关紧要。唯一的线索(或者可能是红鲱鱼)是当客户端和服务器位于同一主机上时,我没有遇到安全异常。如果我使用远程客户端,那么我会得到异常。

虽然我需要包含 jnlp.jar 文件来编译代码,但如果使用 Java WebStart 运行,我认为客户端不需要它。

你还需要知道什么?我还应该尝试什么?

那天晚些时候...

现在这可能是也可能不是错误,我的 jnlp 文件中的参数可能有问题,但我怀疑我使用了错误的方法。只是重申我正在尝试打开一个file://网址。

这是我现在正在做的事情:

我假设桌面设施仅在桌面应用程序中可用 - 而不是小程序。我错了(而且文档很少——即使在这个神圣的网站上,唯一的参考资料告诉我将 JNLP 服务用于 Applet 和桌面用于应用程序)——错误(谢天谢地)

因此,您可以在小程序中使用 Desktop(当然首先检查过Desktop.isDesktopSupported()) - 只要您通过 WebStart 运行而不是作为小程序嵌入。

我会向任何人提出以下方法。

  1. 查看是否支持桌面并使用它。

    Desktop.getDesktop().open(file);

  2. 如果没有,那么看看您是否可以获得基本 JNLP 服务。

    BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");

    如果可用,则将其与boolean openedOK = bs.showDocument(url);

  3. 最后求助于applet API。

    AppletContext context = applet.getAppletContext();

    context.showDocument(url, targetFrame);

4

0 回答 0