You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

JNLP应用启动失败求助:无法加载Scanner.jar资源

排查并解决JNLP启动的FailedDownloadException异常

首先,这个异常的核心问题是Java Web Start(JWS)无法从指定URL加载Scanner.jar等资源,我们可以从以下几个关键方向逐一排查:

1. 优先核对文件名与JNLP配置的大小写一致性

这是最常见的坑!你错误提示里提到的是Scanner.jar,但你的JNLP文件里写的是scanner.jar(小写s)。在Linux/Unix服务器上,文件路径是大小写敏感的,哪怕只差一个字母,JWS都会返回404无法加载。

解决方法:

  • 检查服务器上http://localhost:8080/openmrs/moduleResources/muzimabiometrics/目录下的实际文件名:如果是Scanner.jar,就把JNLP里的<jar href="scanner.jar" main="true"/>改成<jar href="Scanner.jar" main="true"/>;如果实际是小写的scanner.jar,那要确认错误提示里的路径是不是拼写错误。

2. 验证资源的可访问性

手动用浏览器或者curl命令访问每个JNLP里的jar URL,比如:

curl http://localhost:8080/openmrs/moduleResources/muzimabiometrics/Scanner.jar
curl http://localhost:8080/openmrs/moduleResources/muzimabiometrics/Jlibfprint.jar

如果某个URL返回404错误,说明:

  • 该jar文件不存在于指定目录
  • 服务器路径配置错误(比如OpenMRS模块的资源目录映射不对)
  • 服务器权限限制(比如Tomcat用户没有读取该文件的权限)

3. 完善JNLP文件的基础配置

你的JNLP文件有两个可以优化的点,能避免路径解析问题:

  • href属性为空:建议明确指定JNLP文件名,比如href="scanner.jnlp",这样JWS能更准确地基于codebase解析资源路径
  • 确认codebase的正确性:确保末尾的斜杠/存在,否则资源路径会拼接错误(比如变成muzimabiometricsscanner.jar

修正后的JNLP示例(假设实际文件名是Scanner.jar):

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/openmrs/moduleResources/muzimabiometrics/" href="scanner.jnlp">
  <information>
    <title>Web start</title>
    <vendor>Muzima Team</vendor>
    <offline-allowed/>
  </information>
  <resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="Scanner.jar" main="true"/>
    <jar href="Jlibfprint.jar" />
    <jar href="httpcore-4.4.4.jar" />
    <jar href="httpclient-4.5.2.jar" />
    <jar href="commons-logging-1.2.jar" />
    <jar href="commons-codec-1.9.jar" />
  </resources>
  <security>
    <all-permissions/>
  </security>
  <application-desc main-class="org.openmrs.module.muzimabiometrics.ScanFingerprint">
  </application-desc>
  <update check="background"/>
</jnlp>

4. 清理Java Web Start缓存与检查安全设置

有时候缓存会导致资源加载异常,或者安全级别过高阻止访问:

  • 打开Java控制面板 → 「临时Internet文件」→ 「设置」→ 「删除文件」,清空缓存后重新尝试启动
  • 如果Java安全级别设置为高,把http://localhost:8080添加到「例外站点列表」,因为JNLP请求了all-permissions权限,需要信任该站点

5. 检查服务器的资源访问权限

确保运行OpenMRS的服务器(比如Tomcat)用户拥有读取muzimabiometrics目录下所有jar文件的权限,同时确认OpenMRS模块的资源映射配置正确,没有拦截这些jar文件的访问。


内容的提问来源于stack exchange,提问作者enock tum

火山引擎 最新活动