2012-02-11 5 views
0

スレッド内でランダムメソッドを実行しようとしています。私はこれをメインのUIスレッドをハングアップしていたので、これをスレッドの中に入れる必要があります。しかし、それは動作していないようです。ログは0のサイズを返します。私は助けが必要です、以下のコード。私はあなたのコードあなたlogランダムな値の後にthread.start(); ラインをレビューとしてスレッド内のランダムは動作しません。

public class RandomActivity extends Activity implements Runnable { 
private TextView random; 
Thread thread; 
private boolean flagRandom; 
private ArrayList<Integer> listRandom; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    thread = new Thread(this); 
    flagRandom = false; 
    listRandom = new ArrayList<Integer>(); 
    random = (TextView) findViewById(R.id.txtRandom); 
    thread.start(); 
    for(int i=0; i<5; i++) { 
     Log.i("RANDOM", listRandom.get(i).toString()); 
    } 
} 
@Override 
public void run() { 
    Random rNum = new Random(); 
    while(flagRandom) { 
     for(int ctr=0; ctr<5; ctr++) { 
      if(ctr > 0) { 
       int iRand = rNum.nextInt(5) + 1; 
       if(listRandom.contains(iRand)) { 
        ctr--; 
       } else { 
        listRandom.add(iRand); 
       } 
      } else { 
       listRandom.add(rNum.nextInt(5) + 1); 
      } 
     } 
    } 
} 

}

+0

検索.... –

答えて

2

。スレッドがバックグラウンドで常に実行されるので、スレッドがバックグラウンドでランダムな値をlistRandomに追加すると、下のコードが最初に実行されることを伝えたいと思います。それは、常に0

for(int i=0; i<5; i++) { 
     Log.i("RANDOM", listRandom.get(i).toString()); 
    } 

を返すので、あなたはそれがスレッド停止後にスレッドまたは印刷印刷する必要があります。さらに、スレッドの実行を開始する前に、flagRandomフラグもfalseに設定してください。 whileループは実行されません。

+0

感謝の男:run()Thread宣言の下で定義されなければなりません。あなたは正しいと思います。 –

1

"flagRandom"がfalseに設定されています。したがってwhileループは決して実行されません。

1

あなたの間違いはrun()の定義にあります。ランダムとスレッドのSO

​​
関連する問題