![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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);
}
}
No.4ベストアンサー
- 回答日時:
#2のBudgerigarです。
補足読みました。
簡単に言うと・・・
>Runnable は、Thread をサブクラス化せずにクラスをアクティブにする手段を提供します。
→RunnableはThreadを継承(extends)しなくてもThreadを使えるように出来る。
>Runnable を実装するクラスは、Thread のインスタンスを生成し
→RunnableをimplementsしたクラスはThreadのインスタンスを作り、(例文のThread myTh= new Thread(this); の部分)
>ターゲットとしてクラス自身を渡すことにより Thread をサブクラス化をしなくても実行できます
→こうすることでThreadを継承(extends)しなくてもよい
・・・ってかんじですね。
わかりにくくてすみません。
No.3
- 回答日時:
もう少し質問したい範囲を絞った方が良いですね。
範囲が広すぎるので何から説明すればよいのやら。。。
また、あなたがどこまで理解しているのかによっても
説明の仕方が変わってきますし。
implementsはインターフェースを読み込むときに使います。
インターフェースはそのままでは使えないので、implementsで読み込んだ後、
クラスの中で加工してやらなければなりません。
この場合Runnableというインターフェースはrun()というメソッドを持っていますが、
そのままでは使えないのでクラスの中で
public void run() {
…
}
と、中身を書いてやります。
(6)myTh = null;
は変数myThを初期化しています。
別に適当な値を入れてもかまいませんが、
この変数が、プログラマーの知らないところで呼び出されて
値を参照されると予想できない処理をするかもしれません。
それを防ぐために普通はnullを入れておきます。
(1)(2)(4)(5)については、前回書いたアドレスを読んでみてください。
この回答への補足
急いでいたので、あせっていろいろ質問してしまいました。すいません・・(^^;)
(6)についてはわかりました。ありがとうございます!
やはり問題は「implements」やクラスの関係についてです。
今回の例文では、すでにAppletクラスが使われているので多重継承にならないように
Implements Runnable
と入力し、Runメソッドを呼び出しているんですよね?
考え方としてはRunnableインターフェイスの中のThreadクラスの中のRunメソッドを呼び出す、という感じでいいのでしょうか??
まだインターフェイス自体がよくわかっていないので・・。
もしよろしければその辺も教えてください。
自分のレベルは質問の時に書いた例文がなんとなく読める程度です。
No.2
- 回答日時:
<2>スレッドについて・・
Javaではコード上の複数の個所の処理を同時に行わすことが出来ます。
その処理の流れひとつひとつをスレッド(Thread)といいます。
で、スレッドを起動させるには・・・(3)に続きます。
<3>implementsについて・・
スレッドを起動する方法は2つあります。
(1)Threadクラスを継承する。(extends Thread)
(2)Runnableインターフェイスの実装。(implements Runnable)
でも、今回の例文ですとすでにAppletクラスを継承してるので(1)は使えません。なぜかというとJavaでは2つ以上のクラスを多重継承することが出来ないからです。
このようなときに(2)を使います。
こんなかんじでわかります?
説明下手でごめんなさい。
この回答への補足
回答ありがとうございます!
あと「Platform」を見たのですが意味がよくわかりませんでした(^^;)。
「 Runnable は、Thread をサブクラス化せずにクラスをアクティブにする手段を提供します。Runnable を実装するクラスは、Thread のインスタンスを生成し、ターゲットとしてクラス自身を渡すことにより Thread をサブクラス化をしなくても実行できます。Thread クラスのメソッドのうち、run() だけをオーバーライドして使用する場合は、Runnable インタフェースを使用してください。これは、クラスの基本的な動作を修正または拡張するのでない限り、そのクラスをサブクラス化することは好ましくないため、重要です。」
いったいどういうことなのでしょうか?もしよろしければ教えてください!
No.1
- 回答日時:
(1)MediaTracker
(2)Thread
はクラス名です。そういうクラスがあります。詳細は
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java …
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java …
(3)implements
インターフェースRunnableに使いたいメソッドがある場合、implementsで持ってきます。
クラスから継承するときextendsを使いますね。
これのインターフェースバージョンだと認識しています。
(4)myMt.waitForID(0)
(5)myMt.checkID(0)
MediaTrackerクラスで使えるメソッドです。
どんなメソッドかは上のアドレスに説明があります。
(6)myTh = null;
インスタンス(変数)myThにnullを代入します。
nullとは「値がない」という意味です。
これでわかりにくければまた補足します。
この回答への補足
回答ありがとうございます!
それぞれの項目に関して、もう少し具体的に説明していただけるとうれしいです。なぜこれを使う必要があるのか、どのような特典があるのか、などなど。
特にimplementsについてなんですが、Threadのクラスはimport文ですでに使える状態になっているのになぜimplementsを使わなくてはいけないのですか?
また、implementsを書くことによってどのようなことができるのですか?
この辺が全くわかりません・・・。
なんかおかしな文になってしまいましたが・・。
よろしくおねがいします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲッターを使わないで変数にア...
-
Javaのインターフェースとabstr...
-
インタフェース、クラスの継承...
-
C#のクラスと継承が理解できま...
-
サニタイジングについて
-
javaでhttpのテキスト表示
-
JAVAの初歩でとても悩んでます・・
-
あるクラスであるかどうかを確...
-
Javaでmainからインスタンス化...
-
日本の教育って時間が無い中で...
-
エクセルVBAで、条件に一致する...
-
「天声人語」をインターネット...
-
private static という変数の修飾
-
ファイル読み込み/書き込み速度...
-
VBAのWindowオブジェクトとWork...
-
0 == False はいいけど
-
私はクラスLINEにまだ入れてな...
-
A・B・Cクラスとは?
-
同じパッケージ、クラス名が含...
-
VBAでvlookup関数から、別シー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
(vba)他のアプリケーションの右...
-
「IOException は対応する try ...
-
ゲッターを使わないで変数にア...
-
「継承されたメソッドの可視性...
-
JavaでのAPIの覚え方ってみさな...
-
Javaで下線
-
Javaのインスタンス化の構文の...
-
VB DLLプロジェクトについて
-
【C#】クラスのコンストラクタ...
-
ASP.NETでの共通コードの書き方...
-
委譲って何ですか?
-
オーバーライドとラッパーの違い
-
抽象クラスをJUNITでテストする...
-
JTextFieldの入力制限
-
Commons-Discovery.jarとは?
-
setTextについて
おすすめ情報