IcedTea-8 无法运行任何 jnlp 应用程序(可能是由于 openjdk-11?)

Rom*_*dgz 6 apt java openjdk

我在 Ubuntu MATE 18.04 上。我尝试过的所有 jnlp 应用程序都会出现执行错误。经过检查,Java 中似乎缺少一些库。

于是我把所有东西都删了,重新开始安装,发现apt-get install icedtea-8-plugin依赖:

  ca-certificates-java default-jre default-jre-headless icedtea-8-plugin
  icedtea-netx librhino-java libtagsoup-java openjdk-11-jre
  openjdk-11-jre-headless
Run Code Online (Sandbox Code Playgroud)

虽然预计依赖于 openjdk-8,而不是 11(根据 ubuntu 软件包网站)。我怀疑 jdk-11 不包含一些为此所需的库。

我的猜测是我安装了一些 PPA,现在会产生这种情况,其中 jdk-11 是比任何 jdk-8 包都更新的选择。那么,我怎样才能实现使用 openjdk-8 而不是 11 安装了 icedtea-8 呢?

编辑:这是我尝试从 Firefox 启动 jnlp 应用程序时的输出:

Denying permission: ("java.lang.RuntimePermission" "accessClassInPackage.sun.util.resources")
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)
...
Running jdk9+ ?
java.lang.ClassNotFoundException: sun/misc/JarIndex
...
java.io.FileNotFoundException: /home/roman/.config/icedtea-web/deployment.properties (No existe el archivo o el directorio)     at java.base/java.io.FileInputStream.open0(Native Method)
Run Code Online (Sandbox Code Playgroud)

ClassNotFoundException: sun/misc/JarIndex 是什么让我认为这是由于对 jdk11 的依赖,因为这个类似乎已在 Java 9 中删除。

我尝试只安装 openjdk-8,然后从源代码构建 icedtea。尽管如此,当我完成时,firefox 没有检测到它(可能缺少某些命令)。

任何的想法?

此外,在这些命令的输出下方找到(根据您的回答尝试安装后):

roman@roman-desktop:~$ update-java-alternatives -l
java-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
roman@roman-desktop:~$ which javaws
/usr/bin/javaws
Run Code Online (Sandbox Code Playgroud)

N0r*_*ert 6

经过反复试验,我只找到了一个有用的解决方案 - 我们需要使用以下命令从以前的 Ubuntu 16.04 LTS 手动安装普通的 OpenJDK 8。通常不推荐这样做,但我们没有其他方法可以产生积极的结果。

所以安装命令如下(我们删除现有的 OpenJDK,然后手动安装 deb-packages):

sudo apt purge oracle-java11-* -y
sudo apt purge *openjdk* -y
sudo apt autoremove --purge -y

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre-headless_8u272-b10-0ubuntu1~16.04_amd64.deb
sudo apt install -y ./openjdk-8-jre-headless_8u222-b10-1ubuntu1~16.04.1_amd64.deb

wget http://security.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
sudo apt install -y ./libpng12-0_1.2.54-1ubuntu1.1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openjdk-8/openjdk-8-jre_8u272-b10-0ubuntu1~16.04_amd64.deb
sudo apt install -y ./openjdk-8-jre_8u222-b10-1ubuntu1~16.04.1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/universe/i/icedtea-web/icedtea-netx-common_1.6.2-3ubuntu1_all.deb
sudo apt install -y ./icedtea-netx-common_1.6.2-3ubuntu1_all.deb

wget http://archive.ubuntu.com/ubuntu/pool/universe/i/icedtea-web/icedtea-netx_1.6.2-3ubuntu1_amd64.deb
sudo apt install -y ./icedtea-netx_1.6.2-3ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

我们还需要使用下面的单个长命令来固定/保持此类包的版本:

cat <<EOF | sudo tee /etc/apt/preferences.d/pin-java8
Package: icedtea-netx
Pin: version 1.6.2-3ubuntu1
Pin-Priority: 1337

Package: icedtea-netx-common
Pin: version 1.6.2-3ubuntu1
Pin-Priority: 1337

Package: openjdk-8-jre
Pin: version 8u272-b10-0ubuntu1~16.04
Pin-Priority: 1337

Package: openjdk-8-jre-headless
Pin: version 8u272-b10-0ubuntu1~16.04
Pin-Priority: 1337

EOF
Run Code Online (Sandbox Code Playgroud)

然后应用程序将运行

javaws StartProRealTime.jnlp
Run Code Online (Sandbox Code Playgroud)

注意:安装 Oracle Java 11 或 12 也无济于事。