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

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

我在 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

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

我猜是我安装了一些 PPA,现在产生了这种情况,即 jdk-11 是比任何 jdk-8 包都更新的选择。那么,我如何才能实现 icedtea-8 与 openjdk-8 一起安装,而不是 11?

编辑:这是我尝试从 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)

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

答案1

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

因此安装的命令如下(我们删除现有的 OpenJDK,然后手动安装 deb 包):

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

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

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

然后应用程序将运行

javaws StartProRealTime.jnlp

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

答案2

在我的系统上,我发现javaws仍在尝试使用 jre-11(不起作用),因为default-jre-headless(的依赖项icedtea-netx)创建了一个链接(未被修改update-java-alternatives)。

$ javaws
selected jre: /usr/lib/jvm/default-java

我必须手动更改该符号以指向 jre-8 版本才能javaws再次运行。

答案3

我可以设置默认的 java-8 或 java-11。


$ sudo update-java-alternatives --jre --set java-1.8.0-openjdk-amd64
$ sudo update-java-alternatives --jre-headless --set java-1.8.0-openjdk-amd64
$ sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
update-alternatives: error: no alternatives for appletviewer
update-alternatives: error: no alternatives for mozilla-javaplugin.so
update-java-alternatives: jdk alternative does not exist: /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer
update-java-alternatives: jdk alternative does not exist: /usr/lib/jvm/java-8-openjdk-amd64/bin/jconsole
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

$ sudo update-java-alternatives --jre --set java-1.11.0-openjdk-amd64
$ sudo update-java-alternatives --jre-headless --set java-1.11.0-openjdk-amd64
$ sudo update-java-alternatives --set java-1.11.0-openjdk-amd64
update-alternatives: error: no alternatives for appletviewer
update-alternatives: error: no alternatives for mozilla-javaplugin.so

然后通过其中一个命令正确设置变量 JAVA_HOME


$ export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
$ export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
$ echo $JAVA_HOME

值得检查变量值。

跑步时


 $ javaws filename.jnpl

我收到了一些警告和回应,包括

netx: 无效的 jnlp 文件 /home/phobos/express.jnpl

express.jnpl 是来自https://www.ariscommunity.com/aris-express/download

相应的答复如下


$ javaws ~/express.jnpl
selected jre: /usr/lib/jvm/java-8-openjdk-amd64/jre/

(java:11196): dbind-WARNING **: 19:40:56.468: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
netx: Invalid jnlp file /home/phobos/express.jnpl

$ javaws ~/express.jnpl
selected jre: /usr/lib/jvm/java-11-openjdk-amd64/
WARNING: package javax.jnlp not in java.desktop
netx: Invalid jnlp file /home/phobos/express.jnpl

现在需要找出 jnpl 文件或我的配置出了什么问题。

已解决 - 我使用了错误的文件名。现在可以正常工作了。


$ javaws ~/express.jnlp
selected jre: /usr/lib/jvm/java-8-openjdk-amd64/jre/
selected jre: /usr/lib/jvm/java-8-openjdk-amd64/jre/
Codebase matches codebase manifest attribute, and application is signed. Continuing. See: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/no_redeploy.html for details.
Starting application [com.idsscheer.aris.expresslauncher.AExpressLauncher] ...
May 02, 2019 6:36:28 PM com.idsscheer.aris.common.ADebug println
INFO: [config] creating plugin.cfg from jar file

当前版本 8u212 运行正常。仍需使 JAVA_HOME 名称更改永久生效。

答案4

我发现旧的 Oracle 安装继续保留环境变量设置:

% env | grep oracle
JAVA_HOME=/usr/lib/jvm/java-8-oracle
J2REDIR=/usr/lib/jvm/java-8-oracle/jre
DERBY_HOME=/usr/lib/jvm/java-8-oracle/db
J2SDKDIR=/usr/lib/jvm/java-8-oracle

unset那些制作的程序javaws会选择非 Oracle JRE。

相关内容