【问题标题】:How can I load JAR from a resource not ending with *.jar in the JNLP resources tag?如何从 JNLP 资源标签中不以 *.jar 结尾的资源加载 JAR?
【发布时间】:2012-01-03 13:52:23
【问题描述】:

我想用 Java Web Start 运行一个 JAR 文件。不幸的是,我必须动态加载 JAR 文件(它存储在 Moodle 中)。因此,指向 JAR 文件的链接不会以“.jar”结尾。它实际上是对动态加载 JAR 文件的 PHP 脚本的调用。如果我用浏览器打开链接,就会下载 JAR 文件。无论如何,Java Web Start 无法像那样下载它。我得到以下异常:

com.sun.deploy.net.FailedDownloadException: Ressource konnte nicht geladen werden: http://localhost/moodle22/pluginfile.php/39/mod_assignment/my_file 在 com.sun.deploy.net.DownloadEngine.actionDownload(未知来源) 在 com.sun.deploy.net.DownloadEngine.getCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResource(未知来源) 在 com.sun.javaws.LaunchDownload$DownloadTask.call(未知来源) 在 java.util.concurrent.FutureTask$Sync.innerRun(未知来源) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

以及封装的异常:

java.io.IOException: 无效的 jar 文件 在 com.sun.deploy.net.HttpDownloadHelper.download(未知来源) 在 com.sun.deploy.cache.Cache.downloadResourceToTempFile(未知来源) 在 com.sun.deploy.cache.Cache.downloadResourceToCache(未知来源) 在 com.sun.deploy.net.DownloadEngine.actionDownload(未知来源) 在 com.sun.deploy.net.DownloadEngine.getCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(未知来源) 在 com.sun.deploy.net.DownloadEngine.getResource(未知来源) 在 com.sun.javaws.LaunchDownload$DownloadTask.call(未知来源) 在 java.util.concurrent.FutureTask$Sync.innerRun(未知来源) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

我的 JNLP 文件:

<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="http://localhost">
  <information>
    <title>Test</title>
    <vendor>Me</vendor>
    <homepage href="http://www.google.com"/>
    <description>Test</description>
    <offline-allowed/>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <java version="1.5+"/>
    <jar href="moodle22/pluginfile.php/39/mod_assignment/my_file"/>
  </resources>
  <application-desc>
    <argument>--argument</argument>
  </application-desc>
</jnlp>

如果我用这样的直接链接引用 JAR,一切都会按预期工作:

<resources>
    <java version="1.5+"/>
    <jar href="moodle22/mod/assignment/type/something/tmp/test.jar"/>
</resources>

【问题讨论】:

  • 除非我们知道pluginfile.php 做了什么,以及它到底有什么作用,否则真的帮不上什么忙。 Content-Type 是什么?你是用ASCII模式写出来的吗?我不太了解 Moodle,但是 - 为什么它不能有扩展?

标签: jnlp java-web-start


【解决方案1】:

感谢@Amadan!

Java Web Start 实际上可以从不以“.jar”结尾的资源中加载 JAR。只需设置适当的内容类型:

Content-type: application/java-archive

然后它完美地工作:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2023-03-09
    • 2011-11-25
    相关资源
    最近更新 更多