我有一个在jnlp中运行的applet。我的单个jar文件已签名。每次启动JNLP客户端时,我都会接受权限提示。我可以获得BasicService,但是当我尝试关注URI时,它仍然会抛出一个url权限被拒绝的异常:
file:///D:\temp\test.txt
该文件存在于我尝试过的所有Windows客户端计算机上,打开它时没有任何安全问题。
在客户端上使用32位或64位JRE时会出现此问题。服务器是32位,但我认为这无关紧要。唯一的线索(或者可能是红鲱鱼)是当客户端和服务器在同一主机上时,我没有得到安全性异常。如果我使用远程客户端,那么我会得到例外。
虽然我需要包含jnlp.jar文件来编译代码,但我认为如果使用Java WebStart运行,则客户端不需要它。
您还需要知道什么?我还应该尝试什么?
那天晚些时候......现在这可能是也可能不是bug,我的jnlp文件中的参数可能有问题,但我怀疑我使用了错误的方法。只是为了重新尝试我正在尝试打开file://
网址。
以下是我现在正在做的事情:
我认为桌面设施只能在桌面应用程序中使用 - 而不是applet。我错了(文档很少 - 即使在这个神圣的网站上,唯一的参考资料告诉我将JNLP服务用于Applet和桌面应用程序) - 错误(谢天谢地)
所以你可以在applet中使用Desktop(当然首先检查了Desktop.isDesktopSupported()
) - 只要你通过没有嵌入applet的WebStart运行。
我会向任何人提出以下方法。
查看桌面是否受支持并使用它。
Desktop.getDesktop().open(file);
如果没有,请查看您是否可以获得基本JNLP服务。
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
如果可以,请使用boolean openedOK = bs.showDocument(url);
最后使用applet API。
AppletContext context = applet.getAppletContext();
context.showDocument(url, targetFrame);