Java: нужна помощь, указывая на NullPointerException - PullRequest
0 голосов
/ 14 декабря 2011

Нужна помощь, указывающая, какая из них вызывает исключение NullPointerException.Я попробовал все из того, что я понимаю, но все еще не повезло.

import com.threed.jpct.Object3D;

public class HelloShader extends Activity implements OnScaleGestureListener {

    private float ind = 0;
    private boolean doLoop = true;
    private Ticker ticker = new Ticker(15);
    private Object3D snork = null;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startLoop();    //NullPointerException according to LogCat
    }

    public void initialize(){
        snork = Loader.loadMD2(res.openRawResource(R.raw.image), 0.5f);
        snork.translate(0, 50, 0);
        Texture snorkTexture = new Texture(res.openRawResource(R.raw.imagetexture));
        tm.addTexture("snorkText", snorkTexture);
        snork.setTexture("snorkText");
    }

    public void startLoop(){

        long ticks = 0;

        while (doLoop) {

            ticks = ticker.getTicks();
            if (ticks > 0) {

                animate(ticks); //NullPointerException according to LogCat
            }
        }
    }

    private void animate(long ticks) {
        if (ticks > 0) {
            float ft = (float) ticks;
            ind += 0.02f * ft;
            if (ind > 1) {
                ind -= 1;
            }
            snork.animate(ind, 2);  //NullPointerException according to LogCat

        }
    }

    private static class Ticker {

        private int rate;
        private long s2;

        public static long getTime() {
            return System.currentTimeMillis();
        }

        public Ticker(int tickrateMS) {
            rate = tickrateMS;
            s2 = Ticker.getTime();
        }

        public int getTicks() {
            long i = Ticker.getTime();
            if (i - s2 > rate) {
                int ticks = (int) ((i - s2) / (long) rate);
                s2 += (long) rate * ticks;
                return ticks;
            }
            return 0;
        }
    }

Это всего лишь часть кода, который возвращает ошибку, весь код очень длинный, поэтому я не разместил их все, потому чтодругие части не имеют отношения к ошибке.Я поместил комментарий для строки, которая возвращает NullPointerException.Заранее спасибо =) Дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 3 ]

5 голосов
/ 14 декабря 2011

Вы не звонили initialize до вызова animate, который вызывается во время onCreate.Итак, snork равно нулю.

Измените onCreate на:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    initialize();
    startLoop();
}
3 голосов
/ 14 декабря 2011

Очевидно, snork имеет значение NULL, что означает, что либо initialize() не выполняется раньше, чем onCreate(), либо вызов Loader.loadMD2() возвращает null.

0 голосов
/ 14 декабря 2011

Вы не инициализировали s2, когда проверяете, что условие s2 все еще не присвоено.

if (i - s2 > rate) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...