2011-08-04 121 views
0

我有一個類(在它自己的文件)UncaughtExceptionHandler的概率

public class UncaughtExceptionHandler implements 

java.lang.Thread.UncaughtExceptionHandler 

在我的主要程序中,我有以下幾點: -

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()); 

當編譯我收到以下錯誤: -

cannot instantiate the type Thread.UncaughtExceptionHandler 

我在這裏錯過了一些基本點嗎?

這裏是代碼: import java.io. *;

import android.content。*;

public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {0} {0}私有最終上下文myContext;

public UncaughtExceptionHandler(Context context) { 
    myContext = context; 
} 

public void uncaughtException(Thread thread, Throwable exception) { 
     boolean crashedOnLastClose = false; 
    MyApplication.writeProgressLog("before isfinishing".ERROR_FILE_NAME); 
    // The application is being destroyed by the O/S 
     crashedOnLastClose = true; 

     MyApplication.writeProgressLog("after isfinishing",ERROR_FILE_NAME); 


    } 


} 
+1

您是否正在實現接口的所有方法? – Viren

+0

你必須重寫方法[uncaughtException(Thread,Throwable)](http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html#uncaughtException%28java.lang.Thread,%20java.lang。 Throwable%29) –

+0

當**編譯**或**運行時**您的程序出現錯誤?在編譯時得到「無法實例化類型」錯誤似乎很奇怪...... – BegemoT

回答

2

發行

在聲明

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()); 

new UncaughtExceptionHandler() 

實際上是

new java.lang.Thread.UncaughtExceptionHandler() 

拋出異常

SOLUTION

檢查文件UncaughtExceptionHandler.java

找到包:(上的文件的頂部)

package your.package; 

現在去到你的主程序

更換

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()); 

Thread.setDefaultUncaughtExceptionHandler(new your.package.UncaughtExceptionHandler()); 
+0

我剛剛嘗試過你的建議,但仍然給不能實例化消息 – ron

+0

使用'Thread.setDefaultUncaughtExceptionHandler(new your.package.UncaughtExceptionHandler(this))'...如果這沒有工作,嘗試改變你的班級的名字,以不同的名字 –

+0

畢竟,我看到這不是super.onCreate後的第一行,所以移動它,一切正常。感謝所有幫助過我的人,只有我能看到這個定位,所以我很遺憾浪費了時間。作爲Android的新手,我很想知道它背後的原理必須成爲第一條線。 – ron

0

UncaughtExceptionHandler的是一個接口,你不能實例化一個接口。你需要實現它的方法。

您的代碼應該是這樣的:

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { 
    @Override 
    public void uncaughtException(Thread thread, Throwable ex) { 
     // your code 
    } 
}); 

希望這有助於。

+0

我剛剛在主類中輸入了實例代碼,它與'必須重寫超類方法'的錯誤我似乎混淆了使用StackOverflow。爲了在請求結束後顯示代碼,我應該在哪裏使用代碼塊進行響應?它是編輯原件嗎?此外,這個評論區域似乎不允許壓力開始一個新的林。 – ron

+0

嘗試刪除@Override註釋 – EvilDuck

0

我的IDE與使用@Override的相同構造有類似的問題。 類型new Thread的uncaughtException(Thread,Throwable)方法。UncaughtExceptionHandler(){}必須覆蓋超類方法:

 Thread.UncaughtExceptionHandler uce = new Thread.UncaughtExceptionHandler() { 
      @Override 
      public void uncaughtException(Thread t, Throwable e) { 
       String s = "ssh to [email protected]" + host + " failed"; 
       log.error(s); 
       throw new IllegalStateException(s, e); 
      } 
     }; 
+0

原來,我將Java Compiler Compliance Level設置爲1.5。將其更改爲1.6可以解決此問題(Eclipse Indigo)。 (爲什麼???) – gabor