電子書籍の厳選無料作品が豊富!

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

public class ani_ball extends Applet implements Runnable
{
Thread th_mvball = null;
int X,Y;
double x1,y1;
double x2,y2;
double dx,dy;
Graphics g;

public void init()
{
this.setBackground(new Color(150,245,255));
this.X = 250; this.Y = 250;
this.setSize(X,Y);
this.x1 = this.x2 = this.X/2;
this.y1 = this.y2 = this.Y/2;
this.dx = 3;
this.dy = 2;
}

public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillOval((int)(this.x2-3),(int)(this.y2-3),6,6);
this.x1 = this.x2; this.y1 = this.y2;
}

public void start()
{
if(th_mvball == null)
{
th_mvball = new Thread(this);
th_mvball.start();
}
}

public void run()
{
while(true)
{
try
{
this.move();
this.repaint();
Thread.sleep(10);
}
catch(InterruptedException e )
{
this.stop();
}
}
}

public void move()
{
if( y2 > Y ) { y2 = 2*Y - y1 - dy; dy = -dy; }
else if ( y2 < 0) { y2 = -y1 - dy; dy = -dy; }
else if ( x2 > X) { x2 = 2*X - x1 -dx; dx = -dx; }
else if ( x2 < 0) { x2 = -x1 - dx; dx = -dx; }
if( x2 < 0 ) { x2 = -x2 ; dx = -dx; }
else if ( y2 < 0) { y2 = -y2; dy = -dy; }
else if ( x2 > X) { x2 = 2*X - x2; dx = -dx; }
else if ( y2 > Y) { y2 = 2*Y - y2; dy = -dy; }
x2 = x1 + dx;
y2 = y1 + dy;
}

public void stop()
{
if(th_mvball!=null)
{
th_mvball stop();
th_mvball=null;
}
}
}

↑のプログラムをコンパイルすると、「-Xlint: deprecation オプションを指定して再コンパイルしてください」とエラーが出ます。

エラーの対処法、またはプログラムの訂正すべき箇所を教えてください。
よろしくお願いします。

A 回答 (3件)

>ためしに実行してみると、



java ani_ball
というように実行してませんか?
これは「Javaアプリケーション」の場合の実行方法であり、
アプレットの場合はHTMLファイルを作ってブラウザから実行する必要があります。
http://www.hellohiro.com/applet.htm

ついでに、コンパイル時の警告についてですが、
これはsystem0001さんのおっしゃるとおりです。
基本的に、この手のエラーが出るメソッドは、以前のバージョンでは
フツーに使っていたけど、バージョンが変わったことで「推奨されなく」なったものです。
なんで推奨されなくなったかと言うと、
・このメソッドより便利なメソッドを作った
・このメソッドに重大なバグがあって、使い方を間違えるとキケンなことが分かった
・その他。Sunの陰謀か(ウソです)
などさまざまあります。
理由はともかく、少なくとも言えるのは、
「バージョンが上がればいずれこのメソッドは使えなくなる(かもしれない)ので、
今のうちに別の手を考えといてください」
ということです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
はぃ、確かにご指摘のように実行していました。
お礼を書いてから、「あぁ、バカだ...orz」と思いました。

お礼日時:2007/08/04 01:18

>java.lang.Threadのstop()は推奨されません



Java SE のAPIでメソッドを確認してみましょう。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/in …

stopは、「推奨されません」となっていますね。

stop,suspend,resumeといったスレッドを停止再開させる類のメソッドは、デッドロックの危険があるため非推奨になっています。現在、スレッドを停止するのにstopを使うことはまずありません。どうするかというと、終了フラグの変数を用意しておき、

while(フラグ変数){・・・スレッド処理・・・}

というようにして、抜けたいときにはフラグ変数をfalseにしてrunを抜け出すようにします。これでスレッドは安全に終了します。
    • good
    • 0
この回答へのお礼

ありがとうございました。
直してみたら、ちゃんとエラーが出なくてコンパイルできました。

お礼日時:2007/08/04 01:18

こんばんは!


これは、確か・・・
推奨されないクラスやメンバを使用していたり、オーバーライドしている時に
出る警告ですよ!
-deprecationオプションを付加してコンパイルすると、
どのメソッドが推奨されていないか出るみたいです。

警告が出ても、実行できますよ!
試してみてください。
    • good
    • 0
この回答へのお礼

おっしゃるとおりのコンパイル方法だと、
java.lang.Threadのstop()は推奨されません

と出ます。
ためしに実行してみると、
Exception in thread "main" java.lang.NoSuchMethodError: main

と出て、実行できません。
どうしたらいいでしょうか。

お礼日時:2007/08/03 22:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!