こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JAVAの初歩でとても悩んでます・・

JAVAについての質問があります。とても困ってます・・。初心者の自分にもわかるようそれぞれの番号に対しての説明をしていただけると嬉しいです。
ちょっと長いのですが、例文があったのでそれを書いておきます。
(1)「メディアストラッカー」
(2)「スレッド」
(3)「インプリメント」
(4)myMt.waitForID(0)
(5)myMT.checkID(0)
(6)myTh = null;

import java.applet.*;
import java.awt.*;

public class Lesson19 extends Applet implements Runnable{
Image[] myImg;
int myNo;
MediaTracker myMt;//メディアトラッカーオブジェクト
Thread myTh;//スレッド

public void init() {
int count;
myImg = new Image[3];
myNo = 0;
myMt = new MediaTracker(this);
myTh = null;

for (count = 0; count < 3; count++) {
myImg[count] = getImage(getDocumentBase(), "image" + count + ".gif");
myMt.addImage(myImg[count], 0);
}
}
public void start(){
if (myTh == null) {
myTh= new Thread(this);
myTh.start();
}
}
public void run() {
try {
myMt.waitForID(0);
} catch(InterruptedException e) {}
while (true) {
myNo = myNo + 1;
if (myNo== 3)
myNo = 0;
try {
myTh.sleep(1000);
} catch(InterruptedException e) {}
repaint();
}
}
public void paint(Graphics g) {
if (myMt.checkID(0))
g.drawImage(myImg[myNo], 80, 80, this);
g.drawString("image" + myNo, 75, 50);
}
}

投稿日時 - 2002-11-06 00:11:28

QNo.397894

すぐに回答ほしいです

質問者が選んだベストアンサー

#2のBudgerigarです。
補足読みました。
簡単に言うと・・・
>Runnable は、Thread をサブクラス化せずにクラスをアクティブにする手段を提供します。
→RunnableはThreadを継承(extends)しなくてもThreadを使えるように出来る。

>Runnable を実装するクラスは、Thread のインスタンスを生成し
→RunnableをimplementsしたクラスはThreadのインスタンスを作り、(例文のThread myTh= new Thread(this); の部分)

>ターゲットとしてクラス自身を渡すことにより Thread をサブクラス化をしなくても実行できます
→こうすることでThreadを継承(extends)しなくてもよい

・・・ってかんじですね。
わかりにくくてすみません。

投稿日時 - 2002-11-08 12:25:28

お礼

とてもわかりやすかったです!!
また、何かあったらよろしくおねがいします!!

投稿日時 - 2002-11-08 22:28:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>Runnableインターフェイスの中のThreadクラスの中のRunメソッドを呼び出す、という感じでいいのでしょうか??

この場合、Threadクラスが継承できないので、
代わりにrunメソッドを持っているRunnableをimplementsしてきた、
ということです。

投稿日時 - 2002-11-08 18:34:56

お礼

なるほどー、やっとわかりました!
とても参考になりました!
また、よろしくおねがいします!

投稿日時 - 2002-11-08 22:48:38

ANo.3

もう少し質問したい範囲を絞った方が良いですね。
範囲が広すぎるので何から説明すればよいのやら。。。
また、あなたがどこまで理解しているのかによっても
説明の仕方が変わってきますし。

implementsはインターフェースを読み込むときに使います。
インターフェースはそのままでは使えないので、implementsで読み込んだ後、
クラスの中で加工してやらなければなりません。
この場合Runnableというインターフェースはrun()というメソッドを持っていますが、
そのままでは使えないのでクラスの中で
public void run() {

}
と、中身を書いてやります。

(6)myTh = null;
は変数myThを初期化しています。
別に適当な値を入れてもかまいませんが、
この変数が、プログラマーの知らないところで呼び出されて
値を参照されると予想できない処理をするかもしれません。

それを防ぐために普通はnullを入れておきます。

(1)(2)(4)(5)については、前回書いたアドレスを読んでみてください。

投稿日時 - 2002-11-07 15:07:13

補足

急いでいたので、あせっていろいろ質問してしまいました。すいません・・(^^;)
(6)についてはわかりました。ありがとうございます!
やはり問題は「implements」やクラスの関係についてです。
今回の例文では、すでにAppletクラスが使われているので多重継承にならないように
Implements Runnable
と入力し、Runメソッドを呼び出しているんですよね?
考え方としてはRunnableインターフェイスの中のThreadクラスの中のRunメソッドを呼び出す、という感じでいいのでしょうか??
まだインターフェイス自体がよくわかっていないので・・。
もしよろしければその辺も教えてください。

自分のレベルは質問の時に書いた例文がなんとなく読める程度です。

投稿日時 - 2002-11-07 18:09:32

ANo.2

<2>スレッドについて・・
Javaではコード上の複数の個所の処理を同時に行わすことが出来ます。
その処理の流れひとつひとつをスレッド(Thread)といいます。
で、スレッドを起動させるには・・・(3)に続きます。

<3>implementsについて・・
スレッドを起動する方法は2つあります。
(1)Threadクラスを継承する。(extends Thread)
(2)Runnableインターフェイスの実装。(implements Runnable)
でも、今回の例文ですとすでにAppletクラスを継承してるので(1)は使えません。なぜかというとJavaでは2つ以上のクラスを多重継承することが出来ないからです。
このようなときに(2)を使います。

こんなかんじでわかります?
説明下手でごめんなさい。

投稿日時 - 2002-11-07 14:25:47

補足

回答ありがとうございます!
あと「Platform」を見たのですが意味がよくわかりませんでした(^^;)。
「 Runnable は、Thread をサブクラス化せずにクラスをアクティブにする手段を提供します。Runnable を実装するクラスは、Thread のインスタンスを生成し、ターゲットとしてクラス自身を渡すことにより Thread をサブクラス化をしなくても実行できます。Thread クラスのメソッドのうち、run() だけをオーバーライドして使用する場合は、Runnable インタフェースを使用してください。これは、クラスの基本的な動作を修正または拡張するのでない限り、そのクラスをサブクラス化することは好ましくないため、重要です。」

いったいどういうことなのでしょうか?もしよろしければ教えてください!

投稿日時 - 2002-11-07 18:13:59

ANo.1

(1)MediaTracker
(2)Thread
はクラス名です。そういうクラスがあります。詳細は
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/awt/MediaTracker.html
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/lang/Thread.html

(3)implements
インターフェースRunnableに使いたいメソッドがある場合、implementsで持ってきます。
クラスから継承するときextendsを使いますね。
これのインターフェースバージョンだと認識しています。

(4)myMt.waitForID(0)
(5)myMt.checkID(0)
MediaTrackerクラスで使えるメソッドです。
どんなメソッドかは上のアドレスに説明があります。

(6)myTh = null;
インスタンス(変数)myThにnullを代入します。
nullとは「値がない」という意味です。

これでわかりにくければまた補足します。

投稿日時 - 2002-11-06 09:43:31

補足

回答ありがとうございます!
それぞれの項目に関して、もう少し具体的に説明していただけるとうれしいです。なぜこれを使う必要があるのか、どのような特典があるのか、などなど。
特にimplementsについてなんですが、Threadのクラスはimport文ですでに使える状態になっているのになぜimplementsを使わなくてはいけないのですか?
また、implementsを書くことによってどのようなことができるのですか?
この辺が全くわかりません・・・。
なんかおかしな文になってしまいましたが・・。
よろしくおねがいします!

投稿日時 - 2002-11-07 11:31:05

あなたにオススメの質問