繁体   English   中英

来自Canvas类(J2ME)的NullPointerException

[英]NullPointerException from Canvas class(J2ME)

我无法从TimerCan类中获取数据。 像字符串和整数。

我有一个方法(静态方法)来获取此数据并将其设置为另一个类。 但是每次我运行程序时,我总会得到NULLPOINTEREXCEPTION信息。

    if(opp.equalsIgnoreCase("incrementing")){///heree

        startTimer();

        if(hour[current]==hhh&&min[current]==mmm&&sec[current]==sss)
        {
            this.start = false;
            this.stop = true;
            this.timer.cancel();

    }
    else if(opp.equalsIgnoreCase("decrementing")){
        startTimerD();

        if(hour[current]==0&&min[current]==0&&sec[current]==0)
        {
            this.start = false;
            this.stop = true;
            this.timer.cancel();

这是我的TimerCan类的完整代码

       public class TimerCan extends Canvas
{
      private Timer timer;
      private Midlet myMid;
      private Player z;
      private int hour[],sec[],min[],msec[],maxX,maxY,current,length,x,y;
      private String time,opp;
      private int strWid,hhh,mmm,sss;
     private int strht; 
     private boolean start;
     private boolean stop;
   public Image img;
Data data;

public TimerCan(Midlet midlet)
{
    this.myMid= midlet;
    data = new Data();

    opp=data.getData();
    hhh=data.getDatah();
    mmm=data.getDatam();
    sss=data.getDatas();

    try
    {
        this.maxX = this.getWidth();
        this.maxY = this.getHeight();
        this.current = 0;
        this.hour = new int[30];
        this.min = new int[30];
        this.sec = new int[30];
        this.msec = new int[30];
        this.start = false;
        this.stop = true;
        for(int j = 0  ; j <= 30 ; j++)
        {
            this.hour[j] = 0;
            this.min[j] = 0;
            this.sec[j] = 0;
            this.msec[j] = 0;
        }
    }catch(Exception e)
    {}
}
public void paint(Graphics g)
{       
    Font font = Font.getFont(0,1,16);
    this.strWid =  font.stringWidth("this.time");
    this.strht = font.getHeight();
         if(hour[current] < 10)
        {
            time = "0"+String.valueOf(this.hour[current])+":";
        }
        else
        {
            time = String.valueOf(this.hour[current]) + ":";  
        }
        if(min[current] < 10)
        {
            time = time+"0"+String.valueOf(this.min[current]) + ":";
        }
        else
        {
            time = time+String.valueOf(this.min[current]) + ":";
        }
        if(sec[current] < 10)
        {
            time = time+"0"+String.valueOf(this.sec[current]) + ":";
        }
        else
        {
            time = time + String.valueOf(this.sec[current]) + ":";
        }
        if(msec[current] < 10)
        {
            time = time+"0"+String.valueOf(this.msec[current]);
        }
        else
        {
            time = time+String.valueOf(this.msec[current]);
        }

    this.strWid =  font.stringWidth(time);
    this.length =  this.maxX - this.strWid;
    this.length /= 2;
    try{
         img = Image.createImage("/picture/aa.png");
    }
    catch(Exception error){
    }
     x = this.getWidth()/2;
     y = this.getHeight()/2;
    g.setColor(63,155,191);
    g.fillRect(0,0,maxX, maxY);
    g.drawImage(img, x, y, Graphics.VCENTER | Graphics.HCENTER);
    g.setColor(0,0,0) ;                                               
    g.drawString(time,length+15,150,Graphics.TOP|Graphics.LEFT);
}
private void startTimer()
{
    TimerTask task = new TimerTask()
    {
        public void run()
        {
           msec[current]++ ;
            if(msec[current] == 100)
            {
                msec[current] = 0 ;
                sec[current]++ ;
            }
            else if(sec[current] ==60)
            {

                sec[current] = 0 ;
                min[current]++ ;
            }
            else if(min[current] == 60)
            {
                min[current] = 0 ;

               hour[current]++ ;
            }
            else if(hour[current] == 24)
            {
                hour[current] = 0 ;
            } 
                   repaint();
        } 
    };  
    timer = new Timer();
    timer.scheduleAtFixedRate(task,10,10) ;           
}
    private void startTimerD()
{
    TimerTask task = new TimerTask()
    {
        public void run()
        {
           msec[current]-- ;
            if(msec[current] == 0)
            {
                msec[current] = 100 ;
                sec[current]-- ;
            }
            else if(sec[current] ==0)
            {

                sec[current] = sss;
                min[current]--;
            }
            else if(min[current] == 0)
            {
                min[current] =mmm;

               hour[current]--;
            }
            else if(hour[current] == 0)
            {
                hour[current] = hhh;
            } 
                   repaint();
        } 
    };  
    timer = new Timer();
    timer.scheduleAtFixedRate(task,10,10) ;           
}
protected  void keyPressed(int keyCode)
{
    if(keyCode == Canvas.KEY_NUM1)
    {
        if(this.start == false)
        {
            this.start=true;
            this.stop=false;
        }
        else if(this.stop == false)
        {
            this.start = false ;
            this.stop = true ;
            this.timer.cancel();
        }
        if(start == true)
        {
             check();
        }
    }
    if(keyCode == Canvas.KEY_NUM2)
    {                 
        this.min[current]=0;
        this.sec[current]=0;
        this.msec[current]=0;       
        this.start = false;
        this.stop = true;
        this.timer.cancel();
        try{
        z.deallocate();
        }
        catch(Exception e){}
        repaint();
    }
    if(keyCode == Canvas.KEY_NUM3)
        {
            if(this.stop == false)
            {
            this.start = false;
            this.stop = true;
            this.timer.cancel();
            try{
                InputStream inss = getClass().getResourceAsStream("alarm.wav");
                InputStreamReader iis= new InputStreamReader(inss);  
                z = Manager.createPlayer(inss,"audio/x-wav");
                z.prefetch();
                z.setLoopCount(2);
                z.start();
                }
    catch(Exception e){
    }
            }
        }
    if(keyCode==Canvas.KEY_NUM0)
    {
        try{
        z.deallocate();
        }
        catch(Exception e){}
        myMid.exit();
    }
 }

public void check()
{
    if(opp.equalsIgnoreCase("incrementing")){

        startTimer();

        if(hour[current]==hhh&&min[current]==mmm&&sec[current]==sss)
        {
            this.start = false;
            this.stop = true;
            this.timer.cancel();
            try{
                InputStream inss = getClass().getResourceAsStream("alarm.wav");
                InputStreamReader iis= new InputStreamReader(inss);  
                z = Manager.createPlayer(inss,"audio/x-wav");
                z.prefetch();
                z.setLoopCount(2);
                z.start();
                }
    catch(Exception e){
    }
        }
    }
    else if(opp.equalsIgnoreCase("decrementing")){
        startTimerD();

        if(hour[current]==0&&min[current]==0&&sec[current]==0)
        {
            this.start = false;
            this.stop = true;
            this.timer.cancel();
            try{
                InputStream inss = getClass().getResourceAsStream("alarm.wav");
                InputStreamReader iis= new InputStreamReader(inss);  
                z = Manager.createPlayer(inss,"audio/x-wav");
                z.prefetch();
                z.setLoopCount(2);
                z.start();
                }
    catch(Exception e){
    }
        }

这是数据类

公开课数据{

String nameD;
int hhD;
int mmD;
int ssD;
public void setData(String name){ 
    this.nameD = name; 
}
public String getData(){ 
    return this.nameD; 
}
//hour
public void setDatah(int hhh){ 
    this.hhD = hhh; 
}
public int getDatah(){ 
    return this.hhD; 
}
//
public void setDatam(int hhh){ 
    this.mmD = hhh; 
}
public int getDatam(){ 
    return this.mmD; 
}
//
public void setDatas(int sss){ 
    this.ssD = sss; 
}
public int getDatas(){ 
    return this.ssD; 
}

}

发生这种情况是因为尚未初始化变量data ,因此它保持为null 这是NullPointerException的明显原因。

您必须调用data = new Data(); 使用之前。

你写了

data = new Data();

在您的TimerCan类中。 这使得没有将nameD设置为任何值的Data对象; 所以当你写

opp = data.getData()

后来,您将opp设置为null ,也就是说,实际上没有opp引用的对象。 当你写

if (opp.equalsIgnoreCase("incrementing"))

这引起了问题。 当您要在其上调用的对象不存在时,您将无法调用方法。

如果opp为null是合法的,但是在opp "incrementing"时您仍然有要运行的代码,则可以这样编写。

if (opp != null && opp.equalsIgnoreCase("incrementing"))

它将调用equalsIgnoreCase方法之前检查opp是否为null 并且您不会获得NullPointerException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM