「Java」アプレットを実行する JRE のバージョンを指定する方法
Java アプレットを実行する JRE のバージョンを指定する方法について調べたので、その時のメモ。
ちなみに、実行環境は以下
Windows 7 SP1 Internet Explorer 10 JRE 6 Update 45 JRE 7 Update 25 ( 2013/07/09 時点の最新バージョン ) ※ Java はどちらも 32bit 版を使用
上記の環境で Java アプレットを JRE 6 Update 45 で動作させたい。
JRE のバージョンを指定する方法について、オラクル社のドキュメントには以下のような情報がある。
・アプレット配備
http://docs.oracle.com/javase/jp/7/technotes/guides/jweb/applet/applet_deployment.html
ドキュメントの内容踏まえると
1. APPLET タグに PARAM 要素を設定
2. OBJECT タグに "classid 属性" を設定
あたりで JRE のバージョン指定ができそうである。
今回は 2 の方法でやってみようと思います。
ひとまず、Java アプレットを用意する。
import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.event.*; public class AppletJREVersion extends Applet{ public void init(){ } public void paint(Graphics g) { g.drawString(System.getProperty("java.version"),10,10); System.out.println(System.getProperty("java.version")); } }
<html> <head> <title>Applet Test</title> </head> <body> <object classid="clsid:CAFEEFAC-0016-0000-FFFF-ABCDEFFEDCBA" codebase="http://www.example.com/out-of-proc-plugin-url-placeholder.exe#1,6,0,0" width="200" height="200"> <param name="code" value="AppletJREVersion.class"> </object> <!-- applet タグ使用した検証も一応したのでその時のもの <applet code="AppletJREVersion.class" width="200" height="200"> <param name="java_version" value="1.6.0_45"> </applet> --> </body> </html>
あと、デフォルトのセキュリティ設定では、署名なし、自己署名の Java アプレットが旧バージョン
の JRE では実行できないので、Java コントロールパネルのセキュリティ設定を "中" に変更しておく。
それで、Java アプレットを適当に Web サーバ上に配置してブラウザからアクセスする。
すると以下の感じの例外が発生。
java.lang.SecurityException: User declined to run unsigned sandbox app
JRE 6 Update 45 で実行することは成功しているけど、肝心の Java アプレットが正常に動作
してくれない。なんか "署名のないサンドボックアプリの実行を取りやめました" 的な内容
と読める ( そのままだけど )。
ただこの例外、Web 探してもほとんど情報がない・・・
署名付きアプレットで試してみてもダメ・・・
いろいろ悩んだあげく、また、有識者の助言もいただきながら、「次世代 Java プラグイン」を
無効にして再度検証してみた。すると、JRE 6 Update 45 で正常にアプレットの実行に成功した。
原因とかわからないけど、ひとまず目的は達成!!
あくまで簡単な検証なので、同じ動作となることは保証できないので、その点はご了承ください。
以上です。
■ 参考
ドキュメントで紹介されている 1 の方法 ( APPLET タグ内で PARAM 要素を設定する ) についても
簡単に試してみた結果、こっちはうまくいかなかった。
具体的には
・次世代 Java プラグインを有効で、"java.lang.SecurityException: User declined to run
unsigned sandbox app" が発生。
・次世代 Java プラグインを無効だど、JRE 7 Update 25 で実行されてしまう。
ただ、1 の方法 JRE 7 Update 25 がインストールされている環境でのみうまくいかない。
その端末にインストールされている最新の JRE のバージョンが JRE 7 Update 21 とかだと
うまくいった。