Я новичок в Java / Android и пытаюсь расширить свои знания, делая простую игру.Вы, наверное, когда-либо слышали о Genius.
Хорошо, вот мой основной код активности:
package br.genius;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class GeniusActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button b1 = (Button) findViewById(R.id.button1);
final Button b2 = (Button) findViewById(R.id.button2);
final Button b3 = (Button) findViewById(R.id.button3);
final Button b4 = (Button) findViewById(R.id.button4);
Button start = (Button) findViewById(R.id.button5);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Principal p = new Principal(b1,b2,b3,b4);
}
});
}
public static void vermelho(int i, ArrayList<Button> alb) {
alb.get(i).setBackgroundColor(-65536);
}
}
и вот мой класс, расширяющий тему:
package br.genius;
import java.util.ArrayList;
import java.util.Random;
import android.widget.Button;
public class Principal extends Thread implements Runnable{
private ArrayList<Button> alb = new ArrayList<Button>();
private Button b1,b2,b3,b4;
private Thread tt;
public Principal(Button b1,Button b2,Button b3,Button b4) {
this.b1 = b1;
this.b2 = b2;
this.b3 = b3;
this.b4 = b4;
tt = new Thread(this);
tt.start();
//this.run();
}
public void run() {
int ve[] = iniciaSequencia();
for (int i = 0; i < 4; i++) {
switch (ve[i]) {
case 1:
alb.add(i, b1);
break;
case 2:
alb.add(i, b2);
break;
case 3:
alb.add(i, b3);
break;
case 4:
alb.add(i, b4);
break;
}
}
for (int i = 0; i < 4; i++) {
GeniusActivity.vermelho(i,alb);
try {
tt.wait(1500);
}
catch(InterruptedException e) {
}
//alb.get(i).setBackgroundColor(-7829368);
}
/*rr = new Runnable(){
public void run(){
for (int i = 0; i < 4; i++) {
vermelho(i);
//atrasador();
//alb.get(i).setBackgroundColor(-7829368); //
}
}
};*/
}
public int[] iniciaSequencia() {
int v[] = new int[4];
Random r = new Random();
for (int i = 0; i < 4; i++) {
v[i] = r.nextInt(4) + 1;
}
return v;
}
}
Iполучаю сообщение об ошибке $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений.
Спасибо, Лев