2011-12-09 4 views
0

私はメソッドに持ってAnimationThreadが実行可能に実装し、そのコンストラクタがあるJavaの「火と忘れて」スレッド

public static void startAnimation() { 
    new AnimationThread().run(); 
} 

:私は、アプレットのinit()メソッドから呼び出しています

public AnimationThread() { 
    new Thread(this, "Animation Thread"); 
    EventQueue.setAnimationCounter(0); 
    alive = true; 
} 

値を返すことはないため、ハングします。このスレッドを開始し、init()メソッドを終了してアプレットが起動するようにする方法はありますか?

おかげ

+1

スレッドを開始する()必要があります。 'run()'を呼び出すことは他のメソッドと同様で、現在のスレッドで実行され、完了したときにのみ返ります。 –

答えて

4

あなたは少し周りのものを移動する必要があります。

public AnimationThread() { 
    EventQueue.setAnimationCounter(0); 
    alive = true; 
    new Thread(this, "Animation Thread").start(); 
} 

public static void startAnimation() { 
    new AnimationThread(); 
} 

start()は異なるスレッド上のコードを実行マジックThread方法です。 AnimationThreadコンストラクタはそれを呼び出した後に正常に戻ります。AnimationThread.run()は新しいスレッドで実行されます。

+2

コンストラクタ内で新しいスレッドを開始することは、状況によっては問題がある可能性があります(詳細については、[findbugs](http://findbugs.sourceforge.net/bugDescriptions.html#SC_START_IN_CTOR)を参照してください)。これを防ぐ簡単な方法は、AnimationThreadクラスのfinalを作ることです。 – Boris

2

たぶん、あなたはrunメソッドの代わりにstartメソッドを呼び出す必要があります。 startメソッドのみが実際に新しいスレッドを実行します。

+0

確かに、 'AnimationThread'はその名前にもかかわらず、' start() 'メソッドを持っていません。 –

関連する問題