2013-07-31 117 views
13

ABstractMethodError的可能原因是什麼?爲什麼我得到java.lang.AbstractMethodError錯誤?

異常在線程「池1線程1」 java.lang.AbstractMethodError:

org.apache.thrift.ProcessFunction.isOneway()Z 
    at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:51) 
    at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) 
    at com.gemfire.gemstone.thrift.hbase.ThreadPoolServer$ClientConnnection.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
+0

給我們一些背景知識,你想要做什麼?可能是一些版本問題!您調用的方法或其他代碼調用現在將轉換爲抽象方法。 – NINCOMPOOP

+0

我正在嘗試hbase節儉版本。我構建節儉編譯器並生成節儉文件。並使用mvn構建我的項目,該項目還下載了0.9.0版本的apache thrift jars。這與我正在使用的是一樣的。 – Avinash

回答

6

簡單的回答是這樣的:一些代碼試圖調用該聲明abstract的方法。抽象方法沒有主體,不能執行。既然你提供資料太少我真的不能更多地討論這種情況發生,因爲編譯器通常捕捉這個問題 - as described here, this means the class must have changed at runtime.

+0

是的,方法被定義爲抽象的,但我追蹤了日食,我看到方法在子類中實現 – Avinash

+0

當然,但這意味着你必須調用一個特定的子類實現。你仍然不能調用方法本身。 – jazzbassrob

+0

我再次查了一遍,Apache thrift生成的代碼正在調用子對象的具體實現 – Avinash

1

AbstractMethodError

Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled.

27

documnentation這通常意味着你正在使用舊版本的接口實現缺少新的接口方法。例如,java.sql.Connection接口在1.7中獲得了一個新的getSchema方法。如果你有1.6的JDBC驅動程序並調用Connection.getSchema,你將得到AbstractMethodError。

+2

不錯,你讓我在「舊版界面」 – mtyson

0

如果您在實施的方法中遇到此錯誤,請確保您已正確添加您的依賴關係,如this thread中所述。