UbuntuでJava Appletを動かす方法

Ubuntu 18.04でJava Appletを動かすまでに多少手間がかかったので、メモを残します。

結論

先に結論です。

不正確な恐れもあるため、ファイルの削除などは自己責任で慎重に行ってください。
バックアップをとっておくと安心です。

  1. openjdk-8-jdkをインストール
$ sudo apt install openjdk-8-jdk
  1. run.batやクラスファイルなど、自動で生成されるファイルを削除
  2. -Xlint:deprecationオプションをつけてコンパイル
$ javac -Xlint:deprecation Example.java
  1. appletviewerコマンドで実行
$ appletviewer play.html

動作させるまでの体験記

途中でターミナルを閉じてしまったので、最初のほうは言葉だけの説明になります。
また、記載の順番が間違っているかもしれません(記憶を掘り起こしています)。

まず、appletviewerコマンドを入力すると、openjdk-8-jdkまたは openjdk-11-jdkというパッケージをインストールするように提案されます。

新しい方が良いと思い、 openjdk-11-jdkをインストール。 appletviewerコマンドを実行すると、以下のようなエラーメッセージが表示されて(抜粋です)、実行できません。

java.security.AccessControlException: access denied

コンパイルをしてみると、まず以下のようなエラーメッセージが表示されます。

$ javac Example.java
注意:Example.javaは推奨されないAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。

そこで、-Xlint:deprecationオプションをつけてコンパイルをすると、以下のようなエラーメッセージが表示されます。

$ javac -Xlint:deprecation Example.java
Example.java:5: 警告:[deprecation] java.appletのAppletは推奨されません
public class Example extends Applet implements Runnable {
                                           ^
警告1個

どうにもならなくなったので、openjdk-11-jdkをアンインストールし、 openjdk-8-jdkをインストールしました。

再度、オプションをつけてコンパイルし、appletviewerコマンドを実行すると、またエラーメッセージが表示されました。

$ appletviewer play.html
java.lang.UnsupportedClassVersionError: Example has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:217)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:152)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:626)
	at sun.applet.AppletPanel.createApplet(AppletPanel.java:801)
	at sun.applet.AppletPanel.runLoader(AppletPanel.java:730)
	at sun.applet.AppletPanel.run(AppletPanel.java:379)
	at java.lang.Thread.run(Thread.java:748)

openjdk-11-jdkをインストールしてコンパイルした名残のようです。 そこで、run.batやクラスファイルなど、自動で生成されたと思われるファイルを削除して、再度コンパイルをしてみました。

そして、appletviewerコマンドを実行すると、きちんと動作しました!

雑感

Java AppletはJava9で非推奨になり、Java11で廃止になったそうです。

もはや使われなくなった、古いアプリケーションを実行するのは手間がかかりますね。