• ベストアンサー

「初心者です」-Xlint: deprecation

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 オプションを指定して再コンパイルしてください」とエラーが出ます。 エラーの対処法、またはプログラムの訂正すべき箇所を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

>ためしに実行してみると、 java ani_ball というように実行してませんか? これは「Javaアプリケーション」の場合の実行方法であり、 アプレットの場合はHTMLファイルを作ってブラウザから実行する必要があります。 http://www.hellohiro.com/applet.htm ついでに、コンパイル時の警告についてですが、 これはsystem0001さんのおっしゃるとおりです。 基本的に、この手のエラーが出るメソッドは、以前のバージョンでは フツーに使っていたけど、バージョンが変わったことで「推奨されなく」なったものです。 なんで推奨されなくなったかと言うと、 ・このメソッドより便利なメソッドを作った ・このメソッドに重大なバグがあって、使い方を間違えるとキケンなことが分かった ・その他。Sunの陰謀か(ウソです) などさまざまあります。 理由はともかく、少なくとも言えるのは、 「バージョンが上がればいずれこのメソッドは使えなくなる(かもしれない)ので、 今のうちに別の手を考えといてください」 ということです。

stealther
質問者

お礼

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

その他の回答 (2)

noname#49664
noname#49664
回答No.3

>java.lang.Threadのstop()は推奨されません Java SE のAPIでメソッドを確認してみましょう。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html stopは、「推奨されません」となっていますね。 stop,suspend,resumeといったスレッドを停止再開させる類のメソッドは、デッドロックの危険があるため非推奨になっています。現在、スレッドを停止するのにstopを使うことはまずありません。どうするかというと、終了フラグの変数を用意しておき、 while(フラグ変数){・・・スレッド処理・・・} というようにして、抜けたいときにはフラグ変数をfalseにしてrunを抜け出すようにします。これでスレッドは安全に終了します。

stealther
質問者

お礼

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

回答No.1

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

stealther
質問者

お礼

おっしゃるとおりのコンパイル方法だと、 java.lang.Threadのstop()は推奨されません と出ます。 ためしに実行してみると、 Exception in thread "main" java.lang.NoSuchMethodError: main と出て、実行できません。 どうしたらいいでしょうか。

関連するQ&A