Question

i'm having trouble from fetching data from my TimerCan class. like String and integers.

i have a method(static method) for getting this data and set it to another class. but every time i run my program i always get NULLPOINTEREXCEPTION in line..

    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();

and heres the full code my TimerCan class

       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){
    }
        }

and heres the Data classs

public class Data{

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; 
}

}

Was it helpful?

Solution

You wrote

data = new Data();

in your TimerCan class. This made a Data object that didn't have nameD set to anything; so when you wrote

opp = data.getData()

later, you were setting opp to null - that is, there wasn't actually an object referenced by opp. When you wrote

if (opp.equalsIgnoreCase("incrementing"))

this caused a problem. You can't call a method, when the object that you're trying to call it on is absent.

If it's legitimate for opp to be null, but you still have code that you want to run when opp is "incrementing" you can write it like this.

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

which will check whether opp is null before it calls the equalsIgnoreCase method - and you won't get the NullPointerException.

OTHER TIPS

This happens because you have not initialized variable data, so it remains null. This is the obvious reason of NullPointerException.

You have to call data = new Data(); prior using it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top