最近工作中遇到了这个问题,在这里写一篇博客记录一下。
目录
基础介绍
需要解决什么问题?
oracle8的jre里自带一个插件libnpjp2.so,这个插件可以用来开发Java applet。
不过oracle8的jre只提供amd版本,不提供arm版本,导致使用了oracle的jre开发的applet的业务系统无法在arm上运行,本次解决的就是这个问题。
ps:libnpjp2.so只在oracle的jre里有,jdk里没有,原因不明
applet是什么?
Java applet是一个已经废弃的java 技术,可以通过applet在浏览器上显示图像等内容。
icedtea是什么?
icedtea是一个openjdk开发的用于运行applet的组件,可以作为libnpjp2.so的替代。
icedtea的版本选择
icedtea的下载地址在这里:icedtea-web package : Ubuntu
里面2004的只有1.8版本,不过这个版本是无法使用的,因为icedtea从1.7版本就删除了对浏览器上applet的支持。
所以这里我们选择1804里1.6.2-3.1ubuntu3这个版本。
浏览器选择
firefox自从52版本之后就放弃了对applet的支持,所以我们这里选择52及以下的版本firefox。
或者这里可以选择一些国产浏览器,奇安信或者360,这些浏览器保留了对applet的支持。
如何判断安装成功?
安装完成后如果在浏览器插件页面找到了icedtea字样的插件,说明安装成功。
之后需要安装openjdk-8-jre作为启动环境,因为applet的启动需要依赖jre。
sudo apt install openjdk-8-jre
测试一下
测试网页在这里:Applet Demo
里面有一大堆applet的demo,选哪个都行。
测试了之后会发现,applet是无法正常显示的,这个时候我们可以打开icedtea的debug开关,查看一下日志信息。
分析
先打开icedtea的设置页面,然后按照红字进行勾选,然后关闭浏览器重新打开applet的demo,即可看到日志。
itweb-settings
通过分析日志发现日志最终会卡在plugin_callback,应该是没有收到回应导致的无法显示。
不过用同样的jdk,icedtea和浏览器,在1804上可以正常运行,所以这是OS导致的问题。
最终通过重新编译icedtea(在1604上)打印报错信息确认了是glib的接口阻塞了,因此考虑在2004上降级glib。
直接装glib会有依赖问题,因此直接替换了相关的so库。
不过换库会导致浏览器无法启动,需要将libgtk3的版本也降到1804。
libgtk3没有依赖问题,可以直接装。
装完applet就可以正常启动啦!
ps:glib的库记得替换回来,不然关机之后就打不开了。
另一种方法
最近发现运行applet还有另一种方法,就是使用浏览器的插件“cheerp applet runner”。
安装这个插件后重新打开使用applet的网页,然后点击这个插件,就可以看到applet正常运行。
该插件非商业使用免费。