java - IcedTea 1.8 版无法打开任何 JNLP 文件

标签 java applet java-web-start jnlp icedtea

目前我无法在 Ubuntu 18.04 上打开 .jnlp 文件(TopCoder Arena)。它给出了一条错误信息

net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Could not launch JNLP file. The application has not been initialized, for more information execute javaws/browser from the command line and send a bug report.
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:582)
    at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:945)

早些时候它工作正常。但我想,最近的更新是问题所在。我已经尝试了这两个来源的解决方案 https://forums.linuxmint.com/viewtopic.php?t=294555和 AskUbuntu 。直到现在我无法找到启动竞技场的方法。我也尝试过此线程中的解决方案 https://apps.topcoder.com/forums/?module=Thread&threadID=618387&start=0但他们都没有工作。
我到目前为止尝试过的解决方案:
1.清除应用程序缓存。
2.从Java 11降级到8
我无法将 IcedTea 降级到 1.6 版,因为 1.6 版在我的系统上不起作用。

这是错误消息:
net.sourceforge.jnlp.LaunchException: Fatal: Launch Error: Could not launch JNLP file. The application has not been initialized, for more information execute javaws/browser from the command line and send a bug report.
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:582)
    at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:945)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:576)
    ... 1 more
Caused by: javax.xml.parsers.FactoryConfigurationError: Provider for class javax.xml.parsers.SAXParserFactory cannot be created
    at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:305)
    at java.xml/javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:261)
    at java.xml/javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:147)
    at com.topcoder.client.ui.impl.XMLUIManager.<init>(Unknown Source)
    at com.topcoder.client.ui.UIFactory.getUIManager(Unknown Source)
    at com.topcoder.client.ui.UIFactory.getUIManagerFromResource(Unknown Source)
    at com.topcoder.client.contestApplet.common.LocalPreferences.getAllUIManagers(Unknown Source)
    at com.topcoder.client.contestApplet.ContestApplet.<init>(Unknown Source)
    at com.topcoder.client.contestApplet.runner.generic.main(Unknown Source)
    ... 6 more
Caused by: java.lang.RuntimeException: Provider for class javax.xml.parsers.SAXParserFactory cannot be created
    at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:302)
    ... 14 more
Caused by: java.util.ServiceConfigurationError: javax.xml.parsers.SAXParserFactory: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
    at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:588)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1211)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1220)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator$1.run(ServiceLoader.java:1267)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator$1.run(ServiceLoader.java:1266)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1269)
    at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
    at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384)
    at java.xml/javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:287)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.xml/javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:283)
    ... 14 more

最佳答案

显然,IcedTea 不适用于 Java 11。有以下三种选择:

  • 停止使用 JNLP、applet、JWS 等。 Oracle 或 OpenJDK 不再支持它们。 Oracle 推荐的许多用例的替代方法是构建和分发使用 jlink 创建的可执行文件。
  • 降级到 OpenJDK 8。参见 @Sankalp1999 的 answer .

    这只会在 2021 年 4 月之前可行,届时 OpenJDK 8 的 Ubuntu 包将达到生命周期的终点并停止获得安全更新。您可能会找到将向后移植安全补丁的 Java 供应商,但 (IMO) 您不太可能通过 Canonical 存储库获取它们。
  • 切换到 OpenWebstart .
  • 关于java - IcedTea 1.8 版无法打开任何 JNLP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473970/

    相关文章:

    java - netty 的处理程序/ssl 包的设计/架构?

    java - 有没有办法在 Android 的远程 View 通知中显示视频?

    java - 带有 Applet 和 JPanel 菜单的 JFrame

    java - 如何将 'unsafe' 参数传递给 Java Webstart 应用程序的 JVM

    java web start 文件权限

    Java 的 Card 类示例 - 打印枚举值

    java - 当构造函数仅被调用一次时,如何使 volatile 字段对于每个线程都是唯一的?

    Java Applet 游戏双缓冲因 switch 语句而中断

    java - 从网页调用 Java 库

    java - 如何在javaws jnlp文件中设置dpiaware