我想在我的GameLoop
类构造函数中运行一个gameloop代码,但似乎它没有响应。
我试图将代码放在OnCreate
方法中而不是新类中,这样就可以了。
我的活动课程:
public class GameActivity extends Activity {
private Button btnHertz;
private TextView textView1;
private GameLoop gameloop;
private int hertz = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
gameloop = new GameLoop();
btnHertz = (Button) findViewById(R.id.btnHertz);
textView1 = (TextView) findViewById(R.id.testTextView1);
}
public void testUpdate(){
hertz++;
textView1.setText(Integer.toString(hertz));
}
GameLoop Class:
public class GameLoop {
private GameActivity gui;
public GameLoop() {
gui = new GameActivity();
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
public void run() {
gui.testUpdate();
}
}, 0, 10, TimeUnit.MILLISECONDS);
}
答案 0 :(得分:3)
gui = new GameActivity();
您传递更新的活动对象与显示您的UI的活动对象不同。
永远不要使用new
自行实例化活动。他们的生命周期方法不会被调用,他们不会对任何事情都有好处。在这种情况下,由于textView1.setText()
尚未运行,您将在onCreate()
获得NPE。
相反,将GameActivity
引用作为参数传递给GameLoop
,例如
... new GameLoop(this)
...
public GameLoop(GameActivity gui) {