• 検索結果がありません。

テキストエディタ ファイル 名.java クラス 名.html クラス 名.java 利 用 方 法 は2 通 り ファイル 名.html Java コンパイラ ( javac ) appletviewer (コンソール 上 ) あるいは WWW ブラウザ (Internet Explorer, N

N/A
N/A
Protected

Academic year: 2021

シェア "テキストエディタ ファイル 名.java クラス 名.html クラス 名.java 利 用 方 法 は2 通 り ファイル 名.html Java コンパイラ ( javac ) appletviewer (コンソール 上 ) あるいは WWW ブラウザ (Internet Explorer, N"

Copied!
10
0
0

読み込み中.... (全文を見る)

全文

(1)

−アプレット−

アプレットとは、

・ 単独で動作することはなく,ほかのアプリケーションの中に組み込まれ形で実行されるプログラム. (主に) Web ページの HTML ソースコードから参照されるプログラムであり,その内容は Web ページ上に表示 される : Web サーバーからブラウザに自動的にダウンロードされ,そのアプレットは WWW ブラウザの環境で実 行される. アプリケーション: 独立してインタプリタを使って実行されるプログラム (これまでのプログラム実行方法) ※アプレットはセキュリティの面から機能に多くの制限が設けられている。 ・Java アプレットからクライアントマシン上のファイルを読み書きできない ・ (同上) プログラムを起動できない ・ (同上) パッケージやクラスは使えない ・クライアントマシンとネットワークでつながった別のマシンへ,Java アプレットから接続できない (アプレットがロードされたマシン以外へネットワーク接続できない) ・特定のシステム情報を読み出すことができない

アプレットの作成と実行手順

・ アプレットは,Applet(AWT)あるいは JApplet(Swing)のサブクラスとして作成する (アプレットは Web ページに組み込まれて実行されるための機能を備えている.) なお,アプレット(のクラス)は public として定義する. ・ コンストラクタの代りに init メソッドを定義する(P4 参照.main メソッドは用いない) ・ JApplet あるいは Applet のコンテントペインに直接コンポーネントを貼り付ける. JApplet, Applet の特徴 ・トップレベルコンテナに相当する.コンポーネントを入れるにはコンテントペインを使う ・メニューバーが(そのまま)付けられる (トップレベルコンテナに相当するため) ・デフォルトの配置方式は BorderLayout ・JApplet,Applet オブジェクトに直接グラフィックスを描画する 実行手順 (1) Java ソースファイルを作成 (→ アプレットのプログラム) (2) HTML ファイルを作成 (3) Java ソースファイルをコンパイルする (→ class ファイルの作成) (4) WWW ブラウザで HTML ファイルを開く あるいは アプレットビューアで HTML ファイルを開く ※ JApplet および Swing は(現時点の)WWW ブラウザでは対応できないため,WWW ブラウザでは表示で きないため,HTML コンバータの利用により実行する.

※ appletviewer … java アプレットを実行し,結果を表示するための Java 開発キット(jdk)のコマンド. appletviewer で表示されば,WWW でも表示できる. ※Applet クラスは Panel クラスを継承している.(下図参照) java.awt.Component java.awt.Container java.awt.Panel java.awt.Applet ( javax.swing.JApplet) クラスの継承関係

(2)

WWW ブラウザ (Internet Explorer, Netscape) テキストエディタ Java コンパイラ ( javac ) appletviewer (コンソール上) 結果表示 (表示用の GUI 上に表示される) Java Applet を用いた処理の流れ あるいは 結果表示 (WWW ブラウザ上に表示) クラス名.html ファイル名.java クラス名.java ファイル名.html クラス名.class 実行にはこの 2 つの ファイルが必要

利用方法は2通り

この2つのファイル (プログラム)を作成

プログラム作成例

Applet1.java 1: import java.applet.*; 2: import java.awt.*; 3:

4: public class Applet1 extends Applet { 5:

6: public void paint(Graphics g) {

7: // Graphics オブジェクトに文字列を描いてもらう 8: g.drawString("Java アプレット テスト成功!", 10, 20); 9: } 10: 11: } Applet クラスは java.applet パッケージ のためimport アプレットはpublic クラス とする Applet クラスの paint メソッドを再定義 アプレットには main メソッドは必要ない Applet クラスを継承 (JApplet の場合あり) Applet1.html 1: <HTML> 2: <HEAD> 3: <TITLE>Java アプレット No.1</TITLE> 4: </HEAD> 5: 6: <BODY> 7: Applet1 のテスト 8: <P>

9: <APPLET code="Applet1.class" width=200 height=50></APPLET> 10: </BODY> 11: </HTML> タグ(<**> ∼ < /**> で処理内容を挟む) ソースファイル(Applet1.java)の実 行のために設定(表示方法含) この部分はWWW ブラウザのみ で表示される 幅200×高 50 領域に

(3)

Appletviewer での表示例 WWW ブラウザでの表示例 Applet1.class の表示 幅 200×高 50

HTML ファイル作成の注意

(1)ファイル名は何でもよい( java, class ファイル名とは異なるファイル名でも良い)

(2) <APPLET code="******" width=*** height=***></APPLET> がソースファイル(クラス名.java(あるいは ク ラス名.class))実行部.( code, width, height はアプレットを表示するための属性(<APPLET>の属性))

code="******" の ****** : 実行対象のファイル名(class ファイル) width=*** と height=*** : アプレットを表示する領域の幅と高さ (3) WWWブラウザでは <BODY> ∼ </BODY> までが表示対象 (4) その他、多数のタグが存在する

アプレット実行方法

① appletviewer 利用 コンソール画面上で以下のコマンドを入力 appletviewer HTML ファイル (例) appletviewer Applet1.html ② WWW ブラウザの利用 WWW ブラウザで HTML ファイルを呼び出す (例) Web ブラウザのアドレスに “e:\tmp\Applet1.html” , “www.iecs.kansai-u.ac.jp/Applet1.html”を入力

(4)

アプレット実行のしくみとメソッド(アプレットのライフサイクル)

Applet クラスには アプレットを実行するためのメソッドが用意されている.(これらのメソッドは Applet クラスに 存在し,再定義して利用する.) アプレットが実行されると、アプレット(Applet あるいは JApplet クラスを継承し,自分で作成したクラス)のオブ ジェクトが生成され,アプレットの実行から終了までに次の4つのメソッドが呼び出される. メソッドの内容に合わせて自分で適当な処理を記述して,実行させる. init( ) start( ) destroy( ) stop( ) Applet の実行 (Web ページのロード) ・別のWeb ページに移る ・ Web ページの終了 (アプレットの破棄) 元の Web ページに戻る Web ページの終了 (アプレットの破棄) アプレットの実行

アプレット実行の流れ

(教科書p174) (通常),GUI 作成の プログラムを記述する. init( )を利用したプログラム例を次ページに示す. init( ) アプレットの実行が開始するときだけ呼び出される. 通常,クラスのコンストラクタに指定する内容(および main メソッドの内容)を記述する. (アプレットのインスタンスフィールドの初期設定、アプレット上のコンポーネントの設定、アプレットが 使うイメージのロードなど) start( ) init( )の実行が終わった後で実行される.あるいはアプレットの実行を再開するときに呼び出される. 通常,アプレットの動作を始動する処理を書く. (スレッドをもつアプレットの場合,start( )でスレッドを開始する.(run メソッドに処理内容を記述する)) stop( ) アプレットの実行を中断(一時停止)するときに呼び出される. アプレットの動作を一時停止したときの処理を書く. (ブラウザが別の Web ページに移るときに自動的に呼び出される) destroy( ) アプレットが終了する直前に呼び出される.(destroy( )の前に stop( )が呼び出される.) アプレットが利用するリソースを解放する処理を書く. (アプレットが使っていたリソースはアプレットの実行が終了すると自動的に解放される.(destroy( )メ ソッドは必要ない.))

(5)

メソッドの利用プログラム例 1:// HelloApplet.java リスト 13.1 (教科書 p175) 2:import java.awt.*; 3:import java.awt.event.*; 4:import javax.swing.*; 5:

6:public class HelloApplet extends JApplet implements ActionListener{ 7: JLabel label; //ラベル用の変数

8: JButton b1, b2; //ボタン用の変数 9:

10: public void init( ){

11: label = new JLabel(" "); //JLabel オブジェクトの生成 12: b1 = new JButton("ごあいさつ"); //JButton オブジェクトの生成 13: b2 = new JButton("消去"); //JButton オブジェクトの生成 14: 15: b1.addActionListener(this); //イベントリスナーを設定 16: b2.addActionListener(this); //イベントリスナーを設定 17: 18: Container c = getContentPane( ); //フレームの内容表示域を得る 19: c.add(label, BorderLayout.NORTH); //ラベルを置く 20: c.add(b1, BorderLayout.CENTER); //ボタンを置く 21: c.add(b2, BorderLayout.EAST); //ボタンを置く 22: } 23:

24: public void actionPerformed(ActionEvent e){ 25: Object obj = e.getSource();

26: if(obj == b1){ //b1 が押されたら 27: label.setText("こんにちは"); //label に文字列を設定 28: } 29: else if(obj == b2){ //b2 が押されたら 30: label.setText(" "); //label の文字列を消す 31: } 32: } 33:} GUI の作成用 プログラム (コンストラクタで記 述されていた内容) hello.html リスト 13.2 (教科書 p176) 1: <HTML> 2: <HEAD> 3: <TITLE>Hello Program</TITLE> 4: </HEAD> 5: <BODY> 6: こんにちはプログラム 7: <HR>

8: <APPLET CODE="HelloApplet.class" WIDTH=150 HEIGHT=60> 9: </APPLET> 10: </BODY> 11: </HTML> 実行結果: (コンソール画面上で) appletviewer hello.html とする 「ごあいさつ」をクリックした場合 HelloApplet.class(アプレッ ト)の実行のためのコマンド JApplet の継承

(6)

アプレット上でのイメージ(画像データ)表示

Swing コンポーネント上にイメージを表示するためには下のどちらかを利用する. ・ImageIcon オブジェクト (→ アプリケーションと同じ)

・Image オブジェクト (→ アプリケーションとは異なる) (注意)

Image オブジェクトを利用する場合は,Applet クラスの getImage メソッドを使うことが必要 ・Applet クラスのオブジェクトが作成されていないと動かない

・通常,init( )内で指定

ロードするイメージファイルの URL の指定を Applet クラスの getCodeBase( )を使うと,プログラム内で具体的な URL を記述しないですむ

Image img= getImage( getCodeBase( ), “imageFile.gif”);

ImageIcon icon = new ImageIcon(new URL(getCodeBase( ), “imageFile.gif”)); 1:// AppletImg.java

2:// 画像を表示する Java アプレット 3:import java.applet.*;

4:import java.awt.*; 5:

6:public class AppletImg extends Applet { 7:

8: Image img; 9:

10: public void init( ) {

11: img = getImage(getDocumentBase( ), "dance.gif"); 12: }

13:

14: public void paint(Graphics g) { 15: g.drawImage(img, 5, 10, this); 16: } 17:} 実行時に始めに一度だけ 実行される (init( )メソッド) Image クラス型変数に画像デ ータを入れる ※Appletのメソッドであること に注意 頻繁に実行される描画のための メソッド 実際に描画するメソッド ※Graphics クラスのメソッドで あることに注意 getDocumentBase( )は Applet クラスのメソッドで検索対象のフォルダを設定する ・引数無しで呼び出すと HTML ファイルと同一のフォルダ内のファイルを探す Applet を継承 AppletImg.html 1: <HTML> 2: <HEAD> 3: <TITLE>Java アプレット(画像)</TITLE> 4: </HEAD> 5: 6: <BODY>

7: <APPLET code="AppletImg.class" width=200 height=80></APPLET> 8: </BODY> 9: </HTML> 結果表示(appletviewer) java のプログラムの class ファイル 画像データ

(7)

PARAM タグ(HTML 内での設定)

特徴 ・アプレット実行の,アプレットに対してパラメータを HTML ファイルより与えるタグ ・<PARAM>タグは<APPLET>∼</APPLET>間に指定 ・<PARAM>タグで指定したパラメータはアプレット内(java ファイル内)で getParameter( )で参照できる ・<PARAM>タグでアプレット内に渡されるデータは文字列として渡されるため,数値として扱う場合は対 応するデータの方に変換する必要がある(→ ラッパークラスの利用) getParameter(“W”); java ファイル <APPLET>

<PARAM name=W value=640> </APPLET> html ファイル ※上記の処理により,java ファイル内に W=640(ただし,文字列として)が入る. そこで,java ファイル内で w = Integer.parseInt(getParameter(“W”)); などとすれば, w = Integer.parseInt(getParameter(“640”)); w = 640 となる

プラグイン

ユーザーのブラウザ実行環境によって実行できないプログラム(アプレット)がある場合に,どのブラウザを利 用しても正常に作動するようにブラウザの環境を設定変更するために(アプレットにより)環境設定 を行うプログラムおよびそのしくみをプラグインと言う.(ブラウザの環境とは独立してアプレット が実行される.例えば,QuickTime や RealPlayer,Acrobat Reader といったソフトを Web からダ

ウンロードして(自分のコンピュータに)設定することやそのソフトも“プラグイン”と言う.)

○ HTML ファイルでの設定

プラグインで実行するアプレットを Web ページに組み込むには,

・<EMBED>タグ(Netscape 用),<OBJECT>タグ(Internet Explore 用)を利用する.

・ブラウザの種類に依存しないため<APPLET>タグでアプレットを組み込んだ HTML ファイルを,プラ グインアプレットへ変換するプログラムを利用する.(HTML コンバータ.タグを書く必要が無い)

ブラウザとアプレットのコミュニケーション

(教科書 p185) アプレットがブラウザあるいはビューア上で実行されている場合,Applet クラスあるいは AppletContext インタ ーフェースのメソッドにより,ブラウザおよびビューアとアプレット間で情報のやり取り(コミュニケーションを取る こと)を可能とする. ブラウザ クライアント側 <HTML 文書> アプレット サーバー側 <.java ファイル ソースコード> 情 報 結果表示 情報入力 ユーザー ① ④ ② ③

(8)

コミュニケーションを取る手段の例 ①ブラウザからアプレットの起動・終了 ブラウザからアプレットを実行 → 自動的にアプレット内の init( ), start( ) などが呼ばれ,ブラウザとアプレット間でコミュニケーションが 取れる.(上図の①の情報伝達後,アプレットで処理がなされる) ②アプレットから Web ページの場所を知る

Applet クラスの getCodeBase( ),getDocument( )メソッド

→ HTML 文書の場所を得る(①の方向で情報を得る.ただし,この場合はクライアントのブラウザとは限 らない.ブラウザ上に表示されている HTML の場所など) ③アプレットがブラウザに状態を知らせる Applet クラスの showstatus( )メソッド → ブラウザのステイタスラインにアプレットの状態を知らせるメッセージを表示する.(アプレットからブラ ウザへの要求を出すことに相当.②の方向で情報をブラウザに与える) ④ブラウザがアプレットのパラメータの情報を知る Applet クラスの setParameterInfo( )メソッド → ブラウザからアプレットに引き渡すパラメータを設定する.(ブラウザ内で与えられた情報をアプレット に渡す.ユーザーからインタラクティブにパラメータを設定できる.(<PARAM>タグの利用)①の方 向で情報をアプレットに与える) ⑤アプレットからブラウザの表示ページを変える AppletContext インターフェースの showDocument( )メソッド → ブラウザの表示をアプレット内で設定した URL のページに変更できる(アプレット側からブラウザを操 作.②の方向で情報をアプレットに与える)

(9)

動画 (スレッドの利用)

動画作成のポイント (1) 動画を実行するためにはスレッドを利用して,描画(および動画)の開始,再描画(ウィンドウの表示の更 新)を行なう. 「スレッドのオブジェクト作成 」 続けて 「スレッドの開始( start( ) → run( ) )」 に順で処理する. このため,以下の処理が必要となる. ① init メソッド内で 「スレッドのオブジェクト作成 」 と 「スレッドの開始( start( ))」 ② run( )の記述 (2) ウィンドウの更新(再描画)には repaint メソッドを用いる.(「グラフィックス」の資料参照のこと) repaint メソッドの実行により, 「 repaint( ) → update( ) → paint( ) 」と自動的に実行される.

このため,以下の処理が必要となる.

① run メソッド内で 「repaint メソッド」を繰り返し呼ぶ.

(具体的には,while 文,for 文を利用して繰り返して repaint( )を実行させる.)

② ①で repaint メソッドを呼ぶ際に 描画を一定時間休止させる.(Thread クラスの sleep メソッドの 利用)

③ paint メソッドに描画内容を記述 (paintComponent( ) ではない)

(注意) paint メソッドを利用するため,JApplet , Applet クラスのどちらを継承させても良い. ただし,import するパッケージが異なるので注意すること.( java.awt.* のほか) JApplet の場合: import javax.swing.*;

Applet の場合: import java.applet.*;

プログラム例 1 (カウンタ: Counter.java (独習 java P401)) カウンタはウィンドウ中央に表示し,0から毎秒1ずつ増える 1: import java.applet.*;

2: import java.awt.*; 3:

4: public class Counter extends Applet

5: implements Runnable { 6: int counter;

7: Thread t; 8:

9: public void init( ) {

10: // カウンタを初期化する 11: counter = 0; 12: // スレッドを開始する 13: t = new Thread(this); 14: t.start( ); 15: } //--- init ( ) の終わり 16:

17: public void run( ) { 18: try { 19: while(true) { 20: // 再描画を要求する 21: repaint(); 22: // 次のカウンタを表示する前に休止 23: Thread.sleep(1000); 24: // カウンタを 1 つ進める 25: ++counter; 26: } //--- while( ) の終わり 27: }catch(Exception e) { } 28: } //--- run( ) の終わり 29:

30: public void paint(Graphics g) { 31: // フォントを設定する

32: g.setFont(new Font("Serif", Font.BOLD, 36)); 34: // フォントメトリックスを取得する

35: FontMetrics fm = g.getFontMetrics( ); 36: // カウンタを表示する

37: String str = "" + counter; 38: Dimension d = getSize();

39: int x = d.width/2 - fm.stringWidth(str)/2; 40: g.drawString(str, x, d.height/2); 41: } ///-- paint(Graphics g) の終わり 42: } Counter.html <HTML> <HEAD> <TITLE>Counter Program</TITLE> </HEAD> <BODY> カウンタ プログラム <HR>

<applet code="Counter.class" width=250 height=100> </applet> </BODY> </HTML> Thread を利用するため run( )の 実行 paint( )の 実行 ← 数字の設定 ← 数字(文字列)の 描画

(10)

プログラム例 2 (円の移動: Oval.java (独習 java P406)) 塗りつぶした円がウィンドウの左から右に移動する 1: import java.applet.*;

2: import java.awt.*; 3:

4: public class Oval extends Applet

5: implements Runnable { 6: int x = 0;

7: Thread t; 8:

9: public void init( ) { 10: // スレッドを開始する 11: t = new Thread(this); 12: t.start( );

13: } //--- init ( ) の終わり 14:

15: public void run( ) { 16: try { 17: while(true) { 18: // 再描画を要求する 19: repaint(); 20: // ウィンドウを更新する前に休止する 21: Thread.sleep(100); 22: } //--- while( ) の終わり 23: }catch(Exception e) { } 24: } //--- run( ) の終わり 25:

26: public void paint(Graphics g) { 27: // 塗りつぶした円を描画する 28: Dimension d = getSize(); 29: g.fillOval(x, d.height/4, 50, 50); 30: // x 座標を増やす 31: x += 5; 32: if(x + 50 > d.width) 33: x = 0; 34: } //--- paint (Graphics g ) の終わり 35: } Oval.html <HTML> <HEAD>

<TITLE> Circle Program</TITLE> </HEAD>

<BODY> Oval プログラム <HR>

<applet code=" Oval.class " width=300 height=100> </applet> </applet> </BODY> </HTML> アプレット利用時の注意 (1) JDK のバージョンによって,対応できないブラウザが存在する.(HTMLConverter を利用すると良い) 現在, JDK1.0 ( JDK1.0.2 ), JDK1.1( JDK1.1.8 ), JDK1.2 ( JDK1.2.2 )が存在する. MSIE3.0、Netscape3.0 等のブラウザは JDK1.0 対応のため,JDK1.1 以上では注意が必要. MSIE4.0x、Netscape4.06 以降からは JDK1.1 以上対応(JDK1.0 も含む) (2) ローカルのファイルを WWW ブラウザで表示する場合,該当するローカルのファイル,フォルダに 2バイト文字(漢字,ひらがな等)が含まれていると表示されなくなる.

L1: Applet を継承(L4)しているので java.applet.* を import L5:スレッドを利用するため Runnable インターフェースを実装 L7: スレッドを宣言 L13,14:スレッドのオブジェクト作成と開始 L17∼28: L14 のスレッドの開始により,run( )が実行する L19∼26: 無限ルーチン(repaint メソッドの無限実行) L21: 再描画( L30 の paint メソッドが実行される(update の後)) L23: スレッドを 1000(msec)停止する(描画の停止) L30∼41: 描画の処理(run( )内で増やされた counter を表示)

L1: Applet を継承(L4)しているので java.applet.* を import L5:スレッドを利用するため Runnable インターフェースを実装 L7: スレッドを宣言 L11,12:スレッドのオブジェクト作成と開始 L15∼24: L12 のスレッドの開始により,run( )が実行する L17∼22: 無限ルーチン(repaint メソッドの無限実行) L19: 再描画( L26 の paint メソッドが実行される(update の後)) L21: スレッドを 100(msec)停止する(描画の停止) L26∼34: 描画の処理(x がインスタンス変数であることに注意)

参照

関連したドキュメント

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

名刺の裏面に、個人用携帯電話番号、会社ロゴなどの重要な情

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

今回の調壺では、香川、岡山、広島において、東京ではあまり許容されない名詞に接続する低接

このように雪形の名称には特徴がありますが、その形や大きさは同じ名前で

備考 1.「処方」欄には、薬名、分量、用法及び用量を記載すること。

平成 28 年 3 月 31 日現在のご利用者は 28 名となり、新規 2 名と転居による廃 止が 1 件ありました。年間を通し、 20 名定員で 1

下山にはいり、ABさんの名案でロープでつ ながれた子供たちには笑ってしまいました。つ