我正在写一个小安卓游戏。它应该显示我作为 ImageButtons 实现的 4 只动物的随机序列。用户必须记住这个序列并在之后重复它。
我现在的问题是图像按钮如何可见的正确时机。
我得到了以下 NullPointerException 并且不知道为什么。也许有人可以帮忙!?
这是我的主要活动:
package lichtenberger.paul;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageButton;
import android.widget.TextView;
public class Game extends Activity {
int Reihenfolge[] = new int[40];
Random generator = new Random();
public final int CAT = 0;
public final int MAN = 1;
public final int BIRD = 2;
public final int SHEEP = 3;
public Handler handler;
public Thread AnimalThread;
{for(int i = 0; i<40; i++)Reihenfolge[i]=generator.nextInt(4);}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
final ImageButton cat = (ImageButton)findViewById(R.id.catButton);
final ImageButton sheep = (ImageButton)findViewById(R.id.sheepButton);
final ImageButton man = (ImageButton)findViewById(R.id.manButton);
final ImageButton bird = (ImageButton)findViewById(R.id.birdButton);
final TextView score = (TextView)findViewById(R.id.scoreNTV);
handler = new Handler(){
@Override
public void handleMessage(Message msg){
switch (msg.what) {
case 0:
cat.setVisibility(1);
man.setVisibility(0);
bird.setVisibility(0);
sheep.setVisibility(0);
break;
case 1:
man.setVisibility(1);
bird.setVisibility(0);
sheep.setVisibility(0);
cat.setVisibility(0);
break;
case 2:
bird.setVisibility(1);
sheep.setVisibility(0);
cat.setVisibility(0);
man.setVisibility(0);
break;
case 3:
sheep.setVisibility(1);
cat.setVisibility(0);
man.setVisibility(0);
bird.setVisibility(0);
break;
}
}
};
ShowSequence show = new ShowSequence();
Thread showSeq = new Thread(show);
showSeq.start();
};
}
我的线程类:
package lichtenberger.paul;
public class ShowSequence extends Game implements Runnable{
@Override
public void run() {
show();
}
private void show() {
for(int i = 0; i<40; i++){
switch (Reihenfolge[i]) {
case 0:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(CAT);
} catch (InterruptedException e) {
e.printStackTrace();}
break;
case 1:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(MAN);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case 2:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(BIRD);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case 3:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(SHEEP);
} catch (InterruptedException e) {
e.printStackTrace();
}
default:
break;
}
}
}}
和我的 LogCat:
12-20 15:20:34.974: ERROR/AndroidRuntime(598): FATAL EXCEPTION: Thread-75
12-20 15:20:34.974: ERROR/AndroidRuntime(598): java.lang.NullPointerException
12-20 15:20:34.974: ERROR/AndroidRuntime(598): at lichtenberger.paul.ShowSequence.show(ShowSequence.java:50)
12-20 15:20:34.974: ERROR/AndroidRuntime(598): at lichtenberger.paul.ShowSequence.run(ShowSequence.java:10)
12-20 15:20:34.974: ERROR/AndroidRuntime(598): at java.lang.Thread.run(Thread.java:856)
编辑:
一个活动中的整个代码不起作用:
package lichtenberger.paul;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageButton;
import android.widget.TextView;
public class Game extends Activity {
int Reihenfolge[] = new int[40];
Random generator = new Random();
public ImageButton cat;
public ImageButton man;
public ImageButton bird;
public ImageButton sheep;
public TextView score;
private static Handler handler;
public final int CAT = 0;
public final int MAN = 1;
public final int BIRD = 2;
public final int SHEEP = 3;
public Runnable showAnimal;
public Thread AnimalThread;
{for(int i = 0; i<40; i++)Reihenfolge[i]=generator.nextInt(4);}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
setupUI();
showSequence();
initHandler();
}
public void showSequence() {
showAnimal = new showAnimal();
AnimalThread = new Thread(showAnimal);
AnimalThread.start();
}
public void setupUI() {
cat = (ImageButton)findViewById(R.id.catButton);
sheep = (ImageButton)findViewById(R.id.sheepButton);
man = (ImageButton)findViewById(R.id.manButton);
bird = (ImageButton)findViewById(R.id.birdButton);
score = (TextView)findViewById(R.id.scoreNTV);
}
private void initHandler() {
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case CAT:
cat.setVisibility(1);
man.setVisibility(0);
bird.setVisibility(0);
sheep.setVisibility(0);
break;
case MAN:
man.setVisibility(1);
bird.setVisibility(0);
sheep.setVisibility(0);
cat.setVisibility(0);
break;
case BIRD:
bird.setVisibility(1);
sheep.setVisibility(0);
cat.setVisibility(0);
man.setVisibility(0);
break;
case SHEEP:
sheep.setVisibility(1);
cat.setVisibility(0);
man.setVisibility(0);
bird.setVisibility(0);
break;
}
}
};
}
class showAnimal implements Runnable {
public void run() {
show();
}
private void show() {
for(int i = 0;i<40;i++){
switch (Reihenfolge[i]) {
case 0:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(CAT);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case 1:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(MAN);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case 2:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(SHEEP);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
case 3:
try {
// this pauses the Thread: Alternative to doing stuff...
Thread.sleep(2000);
handler.sendEmptyMessage(BIRD);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
}
}
}
}
感谢帮助 ;)