You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Mint 20打开JNLP文件遇Jar验证致命错误求助

问题描述

在Linux Mint 20中打开JNLP文件时出现以下错误:

selected jre: /usr/lib/jvm/default-java WARNING: package javax.jnlp not in java.desktop selected jre: /usr/lib/jvm/default-java WARNING: package javax.jnlp not in java.desktop java.util.zip.ZipException: zip END header not found at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1607) at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1497) at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1504) at java.base/java.util.zip.ZipFile$Source.(ZipFile.java:1308) at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1271) at java.base/java.util.zip.ZipFile$CleanableResource.(ZipFile.java:733) at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:850) at java.base/java.util.zip.ZipFile.(ZipFile.java:248) at java.base/java.util.zip.ZipFile.(ZipFile.java:177) at java.base/java.util.jar.JarFile.(JarFile.java:350) at java.base/java.util.jar.JarFile.(JarFile.java:321) at java.base/java.util.jar.JarFile.(JarFile.java:274) at net.sourceforge.jnlp.util.JarFile.(JarFile.java:60) at net.sourceforge.jnlp.tools.JarCertVerifier.verifyJar(JarCertVerifier.java:275) at net.sourceforge.jnlp.tools.JarCertVerifier.verifyJars(JarCertVerifier.java:245) at net.sourceforge.jnlp.tools.JarCertVerifier.add(JarCertVerifier.java:211) at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:732) at net.sourceforge.jnlp.runtime.JNLPClassLoader.(JNLPClassLoader.java:338) at net.sourceforge.jnlp.runtime.JNLPClassLoader.createInstance(JNLPClassLoader.java:421) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:495) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:468) at net.sourceforge.jnlp.Launcher.createApplication(Launcher.java:814) at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:531) at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:945)

java.util.zip.ZipException: zip END header not found at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1607) at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1497) at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1504) at java.base/java.util.zip.ZipFile$Source.(ZipFile.java:1308) at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1271) at java.base/java.util.zip.ZipFile$CleanableResource.(ZipFile.java:733) at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:850) at java.base/java.util.zip.ZipFile.(ZipFile.java:248) at java.base/java.util.zip.ZipFile.(ZipFile.java:177) at java.base/java.util.jar.JarFile.(JarFile.java:350) at java.base/java.util.jar.JarFile.(JarFile.java:321) at java.base/java.util.jar.JarFile.(JarFile.java:274) at net.sourceforge.jnlp.util.JarFile.(JarFile.java:60) at net.sourceforge.jnlp.tools.JarCertVerifier.verifyJar(JarCertVerifier.java:275) at net.sourceforge.jnlp.tools.JarCertVerifier.verifyJars(JarCertVerifier.java:245) at net.sourceforge.jnlp.tools.JarCertVerifier.add(JarCertVerifier.java:211) at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:732) at net.sourceforge.jnlp.runtime.JNLPClassLoader.(JNLPClassLoader.java:338) at net.sourceforge.jnlp.runtime.JNLPClassLoader.createInstance(JNLPClassLoader.java:421) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:495) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:468) at net.sourceforge.jnlp.Launcher.createApplication(Launcher.java:814) at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:531) at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:945)

netx: Initialization Error: Could not initialize application. (Fatal: Initialization Error: A fatal error occurred while trying to verify jars. An exception has been thrown in class JarCertVerifier. Being unable to read the cacerts or trusted.certs files could be a possible cause for this exception.: zip END header not found) net.sourceforge.jnlp.LaunchException: Fatal: Initialization Error: Could not initialize application. The application has not been initialized, for more information execute javaws from the command line. at net.sourceforge.jnlp.Launcher.createApplication(Launcher.java:822) at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:531) at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:945) Caused by: net.sourceforge.jnlp.LaunchException: Fatal: Initialization Error: A fatal error occurred while trying to verify jars. An exception has been thrown in class JarCertVerifier. Being unable to read the cacerts or trusted.certs files could be a possible cause for this exception.: zip END header not found at net.sourceforge.jnlp.runtime.JNLPClassLoader.initializeResources(JNLPClassLoader.java:739) at net.sourceforge.jnlp.runtime.JNLPClassLoader.(JNLPClassLoader.java:338) at net.sourceforge.jnlp.runtime.JNLPClassLoader.createInstance(JNLPClassLoader.java:421) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:495) at net.sourceforge.jnlp.runtime.JNLPClassLoader.getInstance(JNLPClassLoader.java:468) at net.sourceforge.jnlp.Launcher.createApplication(Launcher.java:814) ... 2 more

当前Java版本:

java --version 
openjdk 11.0.16 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)

已通过javaws --viewer导入CA证书,但问题未解决。

解决方案

1. 切换到OpenJDK 8 + IcedTea-web

OpenJDK 11及以上版本移除了javax.jnlp包,IcedTea-web是Linux下处理JNLP文件的专用工具,搭配OpenJDK 8可解决包缺失问题:

  • 安装依赖:
    sudo apt update
    sudo apt install openjdk-8-jdk icedtea-netx
    
  • 切换默认Java版本到OpenJDK 8:
    sudo update-alternatives --config java
    
    在弹出的选项中选择对应OpenJDK 8的序号,按回车确认。

2. 验证并修复JAR文件完整性

报错中的zip END header not found说明JNLP依赖的JAR文件损坏或不完整:

  • 清理JNLP缓存:
    rm -rf ~/.cache/icedtea-web/cache/*
    rm -rf ~/.java/deployment/cache/*
    
  • 重新运行JNLP文件,让工具重新下载完整的JAR包。
  • 若手动下载了JAR文件,可先用unzip命令验证:
    unzip -t /path/to/your/application.jar
    
    若验证失败,重新下载该JAR。

3. 正确导入CA证书

使用IcedTea的专属证书管理器导入证书,而非OpenJDK 11的javaws --viewer:

  • 打开IcedTea设置界面:
    itweb-settings
    
  • 切换到Security标签页,点击Manage Certificates,在Trusted Certificates分类下导入你的CA证书文件。
  • 若需要手动导入到JDK信任库,执行以下命令(替换路径和别名):
    sudo keytool -importcert -file /path/to/your/ca.crt -keystore /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -alias "custom-ca"
    
    输入默认密码changeit,并确认信任该证书。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:30:58