2013-07-31 5 views
13

Was sind die möglichen Ursachen für ABstractMethodError?Warum bekomme ich java.lang.AbstractMethodError Fehler?

Exception in thread "Pool-1-Faden-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

Gib uns etwas Kontext, was versuchst du zu tun? Kann ein Versions-Problem sein! Die Methode, die Sie aufrufen oder ein anderer Code aufruft, wird jetzt in eine abstrakte Methode konvertiert. – NINCOMPOOP

+0

Ich habe hbase Sparversion ausprobiert. Ich baue Sparsamkeits-Compiler und generierte Spar-Dateien. und mit mvn mein Projekt zu bauen, das auch Version 0.9.0 der Apache-Sparsamkeitgläser lädt. das ist das gleiche, das ich benutze. – Avinash

Antwort

6

Die einfache Antwort lautet: ein Code versucht, eine Methode aufrufen, die abstract deklariert wird. Abstrakte Methoden haben keinen Körper und können nicht ausgeführt werden. Da Sie so wenig Informationen zur Verfügung gestellt haben kann ich wirklich nicht mehr auf auszuarbeiten, wie dies geschehen kann, da der Compiler in der Regel dieses Problem fängt - as described here, this means the class must have changed at runtime.

+0

Ja, Methode ist als abstrakt definiert, aber ich habe die Eclipse verfolgt und sehe, dass Methoden in untergeordneten Klassen implementiert werden. – Avinash

+0

Sicher, aber das bedeutet, dass Sie eine bestimmte untergeordnete Klassenimplementierung aufrufen müssen. Sie können die Methode immer noch nicht aufrufen. – jazzbassrob

+0

Ich überprüft erneut, Apache-Sparsamkeit generierten Code ruft Kind Objekt spezifische Implementierung – Avinash

1

Von documnentation von 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

in der Regel Es bedeutet, dass Sie verwenden eine alte Version einer Schnittstellenimplementierung, der eine neue Schnittstellenmethode fehlt. Zum Beispiel hat java.sql.Connection interface eine neue getSchema Methode in 1.7 bekommen. Wenn Sie 1.6 JDBC-Treiber haben und Connection.getSchema aufrufen, erhalten Sie AbstractMethodError.

+2

Schön, du hattest mich bei "alter Version einer Schnittstelle" – mtyson

0

Wenn Sie diesen Fehler bei den implementierten Methoden erhalten, stellen Sie sicher, dass Sie Ihre Abhängigkeiten korrekt hinzugefügt haben, wie in this thread erwähnt.