Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:需要指出NullPointerException的帮助吗_Java_Nullpointerexception - Fatal编程技术网

Java:需要指出NullPointerException的帮助吗

Java:需要指出NullPointerException的帮助吗,java,nullpointerexception,Java,Nullpointerexception,需要帮助指出导致NullPointerException的原因。从我的理解来看,我尝试了一切,但仍然没有成功 import com.threed.jpct.Object3D; public class HelloShader extends Activity implements OnScaleGestureListener { private float ind = 0; private boolean doLoop = true; private Ticker t

需要帮助指出导致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的行添加了注释。提前感谢=如果需要其他信息,请告诉我。

很明显,snork为null,这意味着initialize在onCreate之前未运行,或者对Loader.loadMD2的调用返回null。

在调用animate之前未调用initialize,而animate在onCreate期间调用。所以snort是空的

将onCreate更改为:


当您检查条件s2值仍未赋值时,您没有初始化s2

if (i - s2 > rate) {

stacktrace应该告诉您它发生在哪一行?如果之前各种变量为null,您还可以添加一些system.out.println消息以进行打印。如果您在ide中,则可以使用调试器逐步查看从不调用initialize方法的内容。它将启动snork=Loader.loadMD2res.openrawsourcer.raw.image,0.5f;Snrok对象。他已经在它的Ticker构造函数中初始化。如果你在别处调用了initialize,那么对Loader.loadMD2res.openrawrourcer.raw.image,0.5f的调用可能会返回null,因此给Snrok一个null值。@Zéychin:我怀疑,这是一个Android活动,onCreate只是框架调用的第一件事,施工后。在调用onCreate之前,您没有时间手动调用initialize;没有Android标签,Android开发不是我的领域。谢谢你指出这一点。是的,我没有重新标记它,因为它与Android没有严格的关系,尽管具体的位是:
if (i - s2 > rate) {