スレッドの停止|Javaから楽しく学ぶ!ゲームプログラミング専門学校

Javaから楽しく学ぶ!ゲームプログラミング専門学校

ゲームプログラミングとはその名のとおりゲームのプログラムを作ることを指します。『Javaから楽しく学ぶ!ゲームプログラミング専門学校』ではゲームプログラミングについて、実際にゲームプログラムをJAVAプログラミング言語を使用し、作成していきながら詳しく解説していきます。

スレッドの停止

スレッドを起動した場合、必ずどこかで停止させなければなりません。
今回はスレッドを停止させる方法を見ていきます。

スレッドを停止させる方法は非常に簡単です。
起動されたスレッドはrun()メソッドの処理を終了させたら自動的に消滅します。

実際に例を書いてみます。
import java.applet.*;
import java.awt.Graphics;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class Timer extends Applet implements Runnable, MouseListener{
private Thread th;
private boolean running;
private int width;
private int height;
private int count;

public void init(){
width = getSize().width; //Javaアプレット画面横幅サイズ取得
height = getSize().height; //Javaアプレット画面縦幅サイズ取得
addMouseListener(this); //マウスイベントを受け取り準備
}
public void start(){
running = false;
}
public void mouseClicked(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
if(running == false){
count = 0;
running = true;
th = new Thread(this);
th.start();
}else{
running = false;
}
}
public void mouseReleased(MouseEvent e){
}
public void run(){
try{
while(running){
count++ ; //count変数インクリメント
repaint(); //再描画
Thread.sleep(1000); //スレッド一時停止(1秒)
}
}catch(Exception e){}
}
public void paint(Graphics g){
g.drawString("" + count, 50,50);
}
}

上記サンプルはJavaアプレットとして定義しています。
 → 動作確認

まずはrun()メソッドを見てみます。
    public void run(){
try{
while(running){
count++ ;
repaint();
Thread.sleep(1000);
}
}catch(Exception e){}
}

run()メソッド内にあるwhile文は変数runningがtrueの間、ずっと繰り返すようになっています。
※whileブロック内では一秒置きにcount変数をインクリメントさせています。

つまり、runningがtrueの間はスレッドはずっと実行していることになります。
スレッドを停止させたい場合、変数runningを外部からfalseにしてやります。
    public void mousePressed(MouseEvent e){
if(running == false){
count = 0;
running = true;
th = new Thread(this);
th.start();
}else{
running = false;
}
}

mousePressed()メソッドはマウスをクリックしたときに自動的に呼び出されます。
もしrunningがfalseならcount変数を0で初期化し、新しいスレッドを起動させます。
また、新しいスレッドを起動させる前にrunningをtrueにしておきます。

逆にrunningがtrueであったら、起動しているスレッドを停止させるためrunningをfalseにしてやります。

runningがfalseになるとwhileブロック(ループ)を抜けるため、run()メソッドが終了し、スレッドが停止します。
トラックバック:0Edit
Copyright © Javaから楽しく学ぶ!ゲームプログラミング専門学校 All Rights Reserved.
当サイトのテキストや画像等すべての転載転用・商用販売を固く禁じます