HTMLとアプレットの実験

JavaアプレットとHTMLに関するさまざまな実験を掲載しています。

Home > 試してみよう Java実験コーナー > Javaアプレットと HTMLの実験2


Javaアプレットと HTMLの実験2

このページには、以下のサンプルを掲載しています。 下の項目をクリックをすると各サンプルにジャンプします。 ※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
  1. 実験2-1:クラス名を英小文字だけにする  
  2. 実験2-2:クラス名を日本語にする  
  3. 実験2-3:Appletクラスを継承していないクラスをアプレットとして実行する  
  4. 実験2-4:publicではないAppletクラスをアプレットとして実行する  

Javaアプレットと HTMLの実験1では、HTMLファイルのパラメータをいろいろ変化させて実験を行いました。 今回は、Javaアプレットのソースファイルをいろいろ修正して実行してみます。まずは、修正前のHTMLファイル とJavaソースファイルを下記に記載します。内容は、Javaアプレットと HTMLの実験1と同じです。

【実験用サンプル Javaソースファイル - Sample01.java - 】
  1. import javax.swing.JApplet;
  2. import java.awt.Graphics;
  3. public class Sample01 extends JApplet {
  4.   public void paint(Graphics g){
  5.     g.drawString("Sample",10,10);
  6.   }
  7. }

【実験用サンプル HTMLファイル - Sample01.html - 】
  1. <html>
  2.   <applet code="Sample01.class" width="70" height="20"></applet>
  3. </html>

【Sample01.htmlの表示結果】



1. 実験2-1:クラス名を英小文字だけにする
下記赤字部分を変更
【テストファイル1 - test01.java - 】
  1. import javax.swing.JApplet;
  2. import java.awt.Graphics;
  3. public class test01 extends JApplet {
  4.   public void paint(Graphics g){
  5.     g.drawString("Sample",10,10);
  6.   }
  7. }

【実験用サンプル HTMLファイル - test01.html - 】
  1. <html>
  2.   <applet code="test01.class" width="70" height="20"></applet>
  3. </html>
【test01.htmlの表示結果】


【Javaコンソールエラーメッセージエラーメッセージ】
エラーメッセージありません。

【ステータスバーエラーメッセージ】
エラーメッセージありません。

【結果解説】
慣習的にクラス名は、英大文字で始まって英数字で構成されていますが、英小文字から始まってもコンパイルや実行にはなんら影響しません。ただしプログラムは見にくくなる。。。と思いますよ(^^;


2. 実験2-2:クラス名を日本語にする
下記赤字部分を変更
【テストファイル2 - テスト02.java - 】
  1. import javax.swing.JApplet;
  2. import java.awt.Graphics;
  3. public class テスト02 extends JApplet {
  4.   public void paint(Graphics g){
  5.     g.drawString("Sample",10,10);
  6.   }
  7. }

【実験用サンプル HTMLファイル - test02.html - 】
  1. <html>
  2.   <applet code="テスト02.class" width="70" height="20"></applet>
  3. </html>
【test02.htmlの表示結果】


【Javaコンソールエラーメッセージエラーメッセージ】
エラーメッセージありません。

【ステータスバーエラーメッセージ】
エラーメッセージありません。

【結果解説】
おっと。。出来ちゃうんだ。。。まさかコンパイル出来るとは思いませんでした。。。日本語のクラス名も問題なくコンパイル&実行が出来ちゃうみたいです。


3. 実験2-3:Appletクラスを継承していないクラスをアプレットとして実行する
Sample01.javaの4行目のextends JAppletを削除。Sample01.htmlから下記赤字部分を変更。
【テストファイル3 - Test03.java - 】
  1. import javax.swing.JApplet;
  2. import java.awt.Graphics;
  3. public class Test03 {
  4.   public void paint(Graphics g){
  5.     g.drawString("Sample",10,10);
  6.   }
  7. }

【実験用サンプル HTMLファイル - test03.html - 】
  1. <html>
  2.   <applet code="Test03.class" width="70" height="20"></applet>
  3. </html>
【test03.htmlの表示結果】
四角い枠だけ表示されました。

【Javaコンソールエラーメッセージエラーメッセージ】
java.lang.ClassCastException: Test03 cannot be cast to java.applet.Applet
  at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
  at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)
例外: java.lang.ClassCastException: Sample03 cannot be cast to java.applet.Applet

【ステータスバーエラーメッセージ】
エラーメッセージありません。

【結果解説】
Javaアプレットは、Appletクラスのサブクラスでないと動作しないようですね。ClassCastExceptionが出ています。 ブラウザーのJVMがアプレットのinitメソッドやらstartメソッドを実行するのにAppletクラスにキャストしようとして 失敗したみたいですね。。。このエラーが出たらアプレットクラスのサブクラスじゃないクラスをAPPLETタグに設定してしまったのかも。。。


4. 実験2-4:publicではないAppletクラスをアプレットとして実行する
Sample01.javaの4行目のpublicを削除。Sample01.htmlから下記赤字部分を変更。
【テストファイル3 - Test03.java - 】
  1. import javax.swing.JApplet;
  2. import java.awt.Graphics;
  3. class Test04 extends JApplet {
  4.   public void paint(Graphics g){
  5.     g.drawString("Sample",10,10);
  6.   }
  7. }

【実験用サンプル HTMLファイル - test04.html - 】
  1. <html>
  2.   <applet code="Test04.class" width="70" height="20"></applet>
  3. </html>
【test04.htmlの表示結果】
四角い枠だけ表示されました。

【Javaコンソールエラーメッセージエラーメッセージ】
load: Test04.class は public ではありません。あるいは public なコンストラクタを
持っていません。
java.lang.IllegalAccessException: Class sun.plugin2.applet.Plugin2Manager can
 not access a member of class Test04 with modifiers ""
  at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
  at java.lang.Class.newInstance0(Unknown Source)
  at java.lang.Class.newInstance(Unknown Source)
  at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
  at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)
例外: java.lang.IllegalAccessException: Class sun.plugin2.applet.Plugin2Manager can
 not access a member of class Test04 with modifiers ""

【ステータスバーエラーメッセージ】
エラーメッセージありません。

【結果解説】
実験3では、Appletクラスのサブクラスじゃないクラスを指定した場合でしたけど今度は、public宣言をしていないクラスを HTMLのAPPLETタグに指定した場合です。IllegalAccessException。。。不正アクセス例外ってことですかね。。 publicじゃないとブラウザ君が動かせないみたいです。




最終更新日:2019/02/13

2015-03-01からの訪問者数
  707 人