空指针异常使用线程调用方法时

时间:2014-10-04 18:51:53

标签: java multithreading nullpointerexception

我有以下示例,其中我尝试从run方法内部调用类otherClass的方法othermethod()。我已经将这个otherClass类的对象创建为“obj”并使用它来调用该方法。但它抛出了NullPointerException。 请让我知道为什么会这样。

package isAlive;

 class MyClass
{
     static int ans=0; 



     void  counter () throws InterruptedException
     {
         System.out.println("----------------------------");
         synchronized (this){
             System.out.println("----entering>>>>"+this+"  " +this.getClass().getName());

         for (int i=0;i<=10;i++)
             {System.out.println(Thread.currentThread()+"   "+i);
         Thread.sleep(3000);}
         System.out.println("----exit>>>>"+this.getClass().getName()); }
     }


}
 public class staticSync extends Thread
 {
     MyClass obj;
     otherClass oth;
     int num;
     staticSync(int n)
     {
         num=n;
     }
     staticSync(MyClass m,int n)
     {
        obj= m;
        num= n;

     }

     public void run() 
     { 
         try {

        //  obj.counter();
            oth.othermethod();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
     public static void main(String ... as) 
     {try{
        // MyClass m1= new MyClass();
        // MyClass m2= new MyClass();
        staticSync s1= new staticSync(20);
        System.out.println("s1--"+s1);


        //System.out.println("m1="+m1);System.out.println("m2="+m2);
        staticSync s2= new staticSync(15);
        System.out.println("s2--"+s2);


        staticSync s3= new staticSync(15);

        staticSync s4= new staticSync(10);//staticSync s5= new staticSync(m1,10);
        s1.start();
          s2.start();
     }
        catch (Exception e)
        {}
     }

 }


 class otherClass
 {
    public synchronized void  othermethod()
     {
         System.out.println("---------------inside othermethod-..>"+this.getClass().getName());
     }
 }

输出是:

s1--Thread[Thread-0,5,main]
s2--Thread[Thread-1,5,main]
java.lang.NullPointerException
    at isAlive.staticSync.run(staticSync.java:67)
java.lang.NullPointerException
    at isAlive.staticSync.run(staticSync.java:67)

即使使用counter()方法,我也面临同样的问题。

1 个答案:

答案 0 :(得分:1)

您获得空指针异常的原因是您永远不会将值赋给 oth ,因此在您声明它时它将保持为空。

otherClass oth;
              ^ no value is being assigned

基本相同
otherClass oth = null;

由于它始终为null,因此从对象调用方法会引发错误。