gpt4 book ai didi

java - FileNotFoundException 通过 HTTPS 使用 java webstart 1.6 启动 1.4.2 webstart 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:05 26 4
gpt4 key购买 nike

非常感谢所有愿意花时间阅读的人。

我正在努力制作一个 webstart Swing 1.4.2_12 应用程序以使用 java webstart 1.6.0_29 启动。

场景如下:

  1. 所有流量都通过 HTTPS 完成
  2. 用户点击网页上的链接以启动应用程序:servlet生成jnlp文件
  3. Java webstart 客户端 (1.6.0_29) 启动并加载应用程序呼吸
  4. 因为jnlp描述符java中j2se版本设置为1.4.2_12webstart 1.4.2_12 用于启动应用程序(由1.6.0_29)
  5. Java webstart 1.4.2_12 启动失败,声称它找不到一些幽灵“javaws2”文件

报告以下消息:

CouldNotLoadArgumentException[ Could not load specified file/URL : C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2]
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

完整的堆栈跟踪是:

java.io.FileNotFoundException: C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2 (File not found)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
  • 禁用 HTTPS 时会发生同样的错误。

JNLP servlet 将以下两个 HTTP header 发送到客户端:

缓存控制:空
编译指示:空

这些 header 是防止 IE 在 HTTPS 模式下禁用缓存所必需的,这会阻止 java webstart 找到加载的 jnlp 文件(因为它没有被缓存)。

  • Mime 类型设置为:application/x-java-jnlp-file

  • 我不明白的是为什么java 1.4.2_12找不到JWS 1.6.0_29加载的jnlp文件?

感谢阅读。

最佳答案

@Andrew:感谢您的关注。

这是我对这个问题的结论。

简而言之:总是在 jnlp 标签中设置 href 属性!

<jnlp spec="1.0+" codebase="htt://myhost/codebase" href="mustSetThisAbsolutelyForJWS-1.4.2_12.jnlp">
...
</jnlp>

多个 HTTP 调试 session 表明:

场景一:href属性留空,JNLP文件关联客户端JWS 1.6

  1. 用户点击 jnlp 链接,JNLP 文件被下载并缓存浏览器。
  2. JWS 1.6.0_29 启动,然后读取下载的 JNLP 文件。
  3. JWS 1.6.0_29 下载所有 JAR 文件,然后切换到 JWS 1.4.2_12。
  4. JWS 1.4.2_12 启动,然后显然依次读取 JNLP 文件。
  5. JWS 1.4.2_12 尝试检索 href 指向的 JNLP 文件属性。
  6. 由于 href 为空,JWS 报告“无法加载指定的文件/URL: C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2"。(作为旁注,ghost javaws2 有时被命名为 javaws10 或类似名称)

Please note : When using JWS 1.4 or 1.5 with this scenario, the application WILL start. The issue only appears when JWS 1.6 is used to run a 1.4.2_12 application. JWS 1.5 and 1.6 do not fail when no href attribute is set. Instead they simply use the JNLP as is, check the JAR updates and then launch the application.

场景 2:为 href 属性设置了适当的值并且 JNLP 文件与客户端上的 JWS 1.6 相关联

  1. 用户点击 jnlp 链接,JNLP 文件被下载并缓存浏览器。
  2. JWS 1.6.0_29 启动,然后读取下载的 JNLP 文件。
  3. JWS 1.6.0_29 下载所有 JAR 文件,然后切换到 JWS 1.4.2_12。
  4. JWS 1.4.2_12 启动,然后显然依次读取 JNLP 文件。
  5. JWS 1.4.2_12 尝试检索 href 指向的 JNLP 文件属性。
  6. JWS 1.4.2_12 下载 href 属性指向的 JNLP。
  7. JWS 1.4.2_12 下载新下载的 JNLP 文件中引用的所有 JNLP JAR 文件
  8. JWS 1.4.2_12 正确启动应用程序。

这对我来说是一个巨大的痛苦,我花了几天时间才弄明白。希望有一天这会对某人有所帮助。

关于java - FileNotFoundException 通过 HTTPS 使用 java webstart 1.6 启动 1.4.2 webstart 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com