2014-10-04 68 views
-1

我有下面的例子,我試圖從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) 

即使在使用計數器()方法我面臨同樣的問題。

+0

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Alboz 2014-10-04 18:52:33

+2

「我創建了這個otherClass類的一個對象作爲obj」不,你沒有。你無處不在調用'new MyClass()'或'new otherClass()'。 – Boann 2014-10-04 18:54:19

回答

1

你得到一個空指針異常的原因是你永遠不會爲分配一個值,因此當你聲明它時它仍然是空的。

otherClass oth; 
      ^no value is being assigned 

是基本相同

otherClass oth = null; 

因爲它總是空,從調用該對象的方法引發錯誤。

+0

ohh我的壞..我忘了把對象分配給參考。與oth = new otherClass合作很好!非常感謝 – 2014-10-04 19:01:08