Download presentation
Presentation is loading. Please wait.
Published byあきとし みょうだに Modified 約 7 年前
1
1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)
情報処理学会九州支部講習会 「インターネット最前線」 Java プログラミング-入門編- 九州工業大学情報科学センター 山之上 卓 1999 年 2 月 9 日 1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)
2
1.Java 概要 1-1 特徴 1-2 Java 開発キット JDK 1-3 アプレットとアプリケーション
1-4 オブジェクト指向とイベント駆動
3
1-1 特徴 ネットワーク オブジェクト指向 どこでも動く(?), Java VM(仮想マシン)
シンプル(>C++), 現実的(>SmallTalk) Thread … concurrent programming可 GC セキュリティー
4
1-2 Java 開発キット JDK SUN (Java の開発元) が無料で提供, Web や雑誌などで手に入る.
javac … Java コンパイラ java … アプリケーション実行 appletviewer … アップレット実行 jar … Java アーカイブ(jar)操作 その他
5
1-3 アプレットとアプリケーション アプレットは WWW ブラウザの上で動くプログラム. アプリケーションは通常のプログラム.
セキュリティのため、様々な制限あり アプリケーションは通常のプログラム. アプリケーションでネットワークプログラミング も可能 ex. HotJava. アプリケーションのコンパイルと実行 アプレットのコンパイルと実行
7
アプリケーションのコンパイルと実行 プログラム例, コンパイル, 実行 % cat Hello.java
public class Hello { static public void main(String argv[]){ System.out.println("hello world."); } % javac Hello.java Hello.class ができる. % java Hello hello world. %
8
アプレットのコンパイルと実行 プログラム例 Hello1.java: import java.awt.*;
import java.applet.*; public class Hello1 extends java.applet.Applet{ public void paint(Graphics g){ g.drawString("HelloWorld",10,20); }
9
html 例 applet.html: <applet code="Hello1.class" width=100 height=50> </applet> アプレット描画画面の幅 アプレット描画画面の高さ
10
コンパイル ローカルマシンでの実行 % javac Hello1.java Hello1.class ができる.
Hello1.class と applet.html を同じディレクトリに置く ローカルマシンでの実行 % appletviewer applet.html または普通の html ファイルとして閲覧する ことによって実行. Windows などでは、applet.html のアイコンを開く (ダブルクリックなど)
11
- ftp 等で *.class と *.html をサーバに転送
WWW サーバに載せる場合 - ftp 等で *.class と *.html をサーバに転送 - この html をブラウザで見れば実行開始 - *.class をブラウザが受信して、ローカル(クライアント)マシンで実行される http server applet.html Hello1.java
12
1-4 オブジェクト指向とイベント駆動 「オブジェクト」と「メッセージパッシング」 マルチプロセスOSと類似
Java プログラムは「クラス」の定義の列 1つのクラスの中身は、1つの C プログラムに類似 … 「メソッド」~関数 クラスはオブジェクトの鋳型 … new で生成 「イベント」駆動 OS がプログラムを呼び出す
14
2.簡単なアプレット 2-1 ボールを表示 2-2 マウスをクリックした場所にボールを移動 2-3 ボール処理部分を分離
15
2-1ボールを表示 プログラム 1. import java.awt.*; import java.applet.*;
public class BallApplet1 extends java.applet.Applet { public void paint(Graphics g) // ブラウザの表示が更新されるとき、 // ブラウザ側から呼び出される. { g.setColor(Color.red); g.fillOval(100,100, // 楕円が入る左上の座標(x,y) 30,30); // 楕円の幅と高さ }
16
import … 利用する既存のクラスを指定.
ボールを表示するプログラム import … 利用する既存のクラスを指定. java.awt.* … awt は Abstract Window ToolKit(ポータブル GUIライブラリ)である. java.awt は awt「パッケージ(クラスやパッケージの集合)」を表す. Graphics クラスを使うために必要. public … 外部からアクセス可 <-> private class クラス名 … このクラスの名前 extends … クラスの「拡張(継承)」, 上位クラスの定義がまるごと使える Applet クラス… applet の道具立て. 様々なデフォルト(メソッド etc.)が準備されている.
17
ボールを表示するプログラム void… C の場合と同じ. 値を返さない。
paint… 描画を行う「メソッド」. 表示が更新されたときなど、ブラウザ側から、何度も呼び出される Graphics g… オブジェクト g が描画画面 g.setColor … 色の設定, オブジェクト g の setColor メソッドを呼び出す(メッセージパッシング) Color.red … Color クラスの赤 (定数) g.fillOval … 塗りつぶし楕円を描く,
18
2-2.マウスをクリックした場所にボールを移動
プログラム2. import java.awt.*; import java.applet.*; public class BallApplet2 extends java.applet.Applet { int px,py; public void init() // 初期化のとき呼ばれる. { px=100; py=100; } public boolean mouseDown(Event e,int x, int y) // マウスがクリックされたとき呼ばれる { px=x; py=y; repaint(); return true;} public void paint(Graphics g) { g.setColor(Color.red); g.fillOval( px,py, 30,30); }
19
マウスをクリックした場所にボールを移動 int px,py; … ボールの位置 init … 初期化のとき(最初の1回)ブラウザ側から呼ばれる. この他 start, stop 等も使える. boolean … ブール型, true, false mouseDown … マウスがクリックされたとき、ブラウザ側から呼ばれる. true を返すと、この後,なにもしない. repaint … 画面を clear した後, paint を呼び出す.
21
2-3.ボール処理部分を分離 import java.awt.*; import java.applet.*;
プログラム 3. (1/2) import java.awt.*; import java.applet.*; public class BallApplet3 extends java.applet.Applet { ABall ball; public void init() // 初期化のとき呼ばれる { ball=new ABall(100,100,Color.red); } public boolean mouseDown(Event e,int x, int y) // マウスがクリックされたとき呼ばれる { ball.mouseDown(x,y); this.repaint(); return true; } public void paint(Graphics g) { ball.paint(g); } }
22
プログラム3(2/2) class ABall{ int px,py; Color color; public ABall(int x, int y, Color c) // “constructor” { px=x; py=y; color=c;} // public void mouseDown(int x, int y) { px=x; py=y; } // マウスがクリックされたとき、場所を変える public void paint(Graphics g) { g.setColor(color); g.fillOval( px,py, 30,30); // 塗りつぶした楕円を描く }
23
ボール処理部分を分離 Ball ball … Ball型(クラス)の オブジェクトを格納する変数 ball を宣言. 別のクラスを利用-「コンポジション」 ball=new Ball(…) … 「コンストラクタ」 Ball(…)によって新たにオブジェクトを作り ball に代入. ball.○○ … ball オブジェクトの○○メソッドまたは変数 this.repaint() … this はこの(アプレット)オブジェクトを示す. int は new していないことに注意 public Ball(…) … コンストラクタ. オブジェクトを生成するときに使用, void 等の型がないことに注意.
25
3.動画の表示 - ボールを動かす 3-1 設計方針 3-2 ABall クラス 3-3 動かないアプレット
3-4 動くアプレット … Thread の利用
26
3-1. 設計方針
27
ABall クラス (1/2) class ABall{ double px,py; //ボールの場所 double dx,dy; //一定時間後の移動. 進行方向 double velocity; //速度(の係数) double xmin,xmax; // x 方向の移動範囲 double ymin,ymax; // y 方向の移動範囲 Random rm; // rm は乱数発生装置 Color color; public ABall(int x, int y, Color c) {init(x,y,c);} public void init(int x, int y, Color c) { px=x; py=y; color=c; xmin=10.0; xmax=300.0; ymin=10.0; ymax=300.0; velocity=10.0;rm = new Random(); dx=rm.nextDouble()*2-1.0; dy=rm.nextDouble()*2-1.0; }
28
ABall クラス (2/2) public void advance(){ px+=(dx*velocity); py+=(dy*velocity); if(px < xmin){dx=rm.nextDouble(); dy=rm.nextDouble()*2-1.0;} if(xmax < px){dx=-rm.nextDouble(); dy=rm.nextDouble()*2-1.0;} if(py < ymin){dy=rm.nextDouble(); dx=rm.nextDouble()*2-1.0;} if(ymax < py){dy=-rm.nextDouble(); dx=rm.nextDouble()*2-1.0;} } public void paint(Graphics g) { Color cc=g.getColor(); g.setColor(color); g.fillOval((int)px,(int)py,30,30); g.setColor(cc);
29
ABall クラス Random… 乱数発生クラス. java.util.* パッケー ジを import する必要あり. rm.nextDowble() … 次の, 0 から 1 までの double 値の乱数を返す. g.getColor() … 現在の描画色を返す. g.setColor(Color) … 描画色を Color にする. advance() … 次のボールの位置の計算. 壁 に当たったら, random な方向に反射さ せる.
30
3-2. 動かないアプレット プログラム4. public class MoveBall1 extends java.applet.Applet { ABall b1; boolean eol; // もし真なら、ループの実行を終了 public void init() { b1=new ABall( 50,50,Color.red); eol=false;} public void start() { run();} public void run(){ System.out.println("run start"); while(!eol){ System.out.println("while loop"); advance(); repaint(); try{ Thread.sleep(20);} catch(InterruptedException e){} }} public void stop() { eol=true; } // 停止のとき実行 public void advance() { b1.advance(); } public void paint(Graphics g) { b1.paint(g); } }
31
動かないアプレット start() … 初期化後, アプレット開始のためブラウザ側から呼び出される. ここでは run を実行する. run() … while ループ内で, ボールの移動と描画を繰り返す. ところが, ブラウザには何も表示されない. stop() … アプレット停止のためブラウザ側から呼び出される. これが呼び出されると, run() を終了させる.
32
動かないアプレット Thread.sleep(20) … 20 m 秒, 実行を停止する. sleep は, 割り込み例外(エラー)が発生したとき, InterruptedException という型の例外オブジェクトを「投げる」. static メソッド. C の関数のように利用可 try{処理} catch(Exception e){例外処理} … 例外が発生する可能性のある処理を行い, もし例外が発生したら例外処理を行う.
34
3-3. 動くアプレット… Thread の利用 public class MoveBall2 extends java.applet.Applet implements Runnable{ ABall b1; Thread me; public void init() { b1=new ABall(30,30,Color.red); me=new Thread(this); me.start(); } public void run(){ while(me!=null){ advance(); repaint(); try{ Thread.sleep(20);} catch(InterruptedException e){}} public void stop() { me=null; } public void advance() { b1.advance(); } public void paint(Graphics g) { b1.paint(g); } プログラム5.
35
implements Runnable … このアプレットを新しい 制御 Thread として動かすために Runnable 「イ
動くアプレット implements Runnable … このアプレットを新しい 制御 Thread として動かすために Runnable 「イ ンターフェース」を付ける. メソッド run を定義し なければならない. Thread me … Thread クラスの変数 me の宣言, me=new Thread(this) … me にこのアプレット (this)の Thread を代入する. me.start() … me を新しい制御 Thread として開始. start() は run() を呼ぶ. Applet の start とは別.
37
4.アプレットの改良 4-1 複数のボールを動かす(1) 4-2 複数のボールを動かす(2)
4-2 複数の形を動かす … extend, 継承 4-4 マウスのクリックでボールを起動、停止させる プログラム 9 4-3 オーバーライディングによるメソッドの修正 プログラム 10. 4-4 ダブルバッファリングによるちらつき解消 プログラム 11.
38
複数のボールを動かす
39
4-1 複数のボールを動かす(1) プログラム 6. public class Balls1 extends java.applet.Applet implements Runnable{ ABall b1,b2,b3; Thread me; public void init() { me=new Thread(this); b1=new ABall(30,30,Color.red); b2=new ABall(80,200,Color.blue); b3=new ABall(100,100,Color.yellow); me.start(); } public void run(){ while(true){ advance(); repaint(); try{ me.sleep(20);} catch(InterruptedException e){} } 個別に扱うのは大変 ABall クラスから 3つのオブジェクトを 生成
40
複数のボールを動かす (1)(2/2) public void stop() { me=null; } public void advance() { b1.advance(); b2.advance(); b3.advance();} public void paint(Graphics g) { b1.paint(g); b2.paint(g); b3.paint(g); } } 個別に扱うのは大変
41
4-2 複数のボールを動かす(2) プログラム 7. public class Balls2 extends java.applet.Applet implements Runnable{ Vector balls; Thread me; int nballs; public void init() { me=new Thread(this); balls=new Vector(); balls.addElement(new ABall(30,30,Color.red)); balls.addElement(new ABall(80,200,Color.blue)); balls.addElement(new ABall(100,100,Color.yellow)); balls.addElement(new ABall(20,100,Color.black)); balls.addElement(new ABall(100,20,Color.green)); balls.addElement(new ABall(40,70,Color.white)); nballs=6; me.start(); } オブジェクトの配列に利用. 複数のオブジェクトをこの配列にまとめる オブジェクトを追加する, 配列の大きさは自動的に変わる
42
複数のボールを動かす (2) (2/2) public void run(){ while(true){ advance(); repaint(); try{ me.sleep(20);} catch(InterruptedException e){} } public void stop() { me=null; } public void advance() { int i; for(i=0;i < nballs;i++) ((ABall)(balls.elementAt(i))).advance(); } public void paint(Graphics g) ((ABall)(balls.elementAt(i))).paint(g); } i 番目のオブジェクト キャスト
43
4-3 複数の形を動かす … extend, 継承 プログラム8.
44
複数の形を動かす …. 形クラス定義の追加部分
class ARect extends ABall{ public ARect(int x, int y, Color c){ init(x,y,c);} public void paint(Graphics g) { Color cc=g.getColor(); g.setColor(color); g.fillRect((int)px,(int)py,30,30); g.setColor(cc); } class Hello extends ABall{ public Hello(int x, int y, Color c){ init(x,y,c);} { Color cc=g.getColor(); g.setColor(color); g.drawString("Hello.",(int)px,(int)py); g.setColor(cc); 矩形の塗りつぶし表示 ABall の継承(copyに類似) 文字列の表示
45
複数の形を動かす … アプレットの初期化部分
public class Figs extends java.applet.Applet implements Runnable{ Vector figs; int nfigs; Thread me; public void init() { me=new Thread(this); nfigs=5; figs=new Vector(nfigs); figs.addElement(new ABall(30,30,Color.red)); figs.addElement(new ABall(80,200,Color.blue)); figs.addElement(new ABall(100,100,Color.yellow)); figs.addElement(new ARect(150,250,Color.blue)); figs.addElement(new Hello(200,200,Color.green)); me.start(); } …. balls->figs, nballs->nfigs
46
4-3 オーバーライディングによるメソッドの修正
プログラム 10. 4-4 ダブルバッファリングによるちらつき解消 プログラム 11.
47
5.市販開発環境の利用 5-1 GUI をドラッグ&ドロップで作成 プログラム 12 5-1 Access をアクセスするアプレットの開発
5-2 絵を DB に保存できるお絵描きアプレット
48
5-1 GUI をドラッグ&ドロップで作成 TextField, Button, Label を ドラッグ & ドロップ
49
イベントの関連付け … イベント処理の半自動作成
50
クラス階層図
51
イベント処理メソッドの修正
52
実行
53
5-2 Access をアクセスするアプレットの開発
54
ODBC の設定
55
開発環境における java プログラム自動生成ツール
56
自動的に作成されたフォーム
57
実行
58
5-3 絵を DB に保存できるお絵描きアプレット
59
参考文献 JAVA 実践プログラミング,O’REILLY JAVA スレッドプログラミング, O’REILLY
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.