构造函数不会运行它的代码

时间:2014-08-22 10:29:58

标签: java android constructor game-loop

我想在我的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);
}

1 个答案:

答案 0 :(得分:3)

gui = new GameActivity();

您传递更新的活动对象与显示您的UI的活动对象不同。

永远不要使用new自行实例化活动。他们的生命周期方法不会被调用,他们不会对任何事情都有好处。在这种情况下,由于textView1.setText()尚未运行,您将在onCreate()获得NPE。

相反,将GameActivity引用作为参数传递给GameLoop,例如

... new GameLoop(this)

...

public GameLoop(GameActivity gui) {