2016-05-23 1 views
0

私は、VaRの引数NoSuchMethodError呼び出す方法は

public static void myMethod(String sourceClass, String sourceFunction, 
     String message, Object... args) { 

} 

私は2つの方法でこのメソッドを呼び出していて定義されたメソッドを持っています。

  1. myMethod(className, methodName, "List of all users : {}", userLists);

  2. myMethod(className, methodName, "consumers of reqID : {} are : {}", reqID, userLists);

私はコンパイルエラーを取得できませんでしたが、最初のメソッドの呼び出しが正常に実行されたのに対し、実行時に、私は2番目のメソッド呼び出しのエラーの下になりました。

java.lang.NoSuchMethodError: com.example.MyClass.myMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V at

UPDATE

デバッグした後、私は可能な原因をトレースし、それを修正することができます。

'myMethod'は異なるjarに属します。 アプリケーションコードをコンパイルしたときに、上に説明したものと一緒に存在するもう1つのオーバーロードされたメソッドがありました。

public static void myMethod(String processName, String sourceClass, String sourceFunction, 
    String message, Object... args) { 

} 

このオーバーロードされたメソッドが削除され、jarファイルが再生成され、この最終バージョンがwar pomに追加されます。私が作った

修正は次のとおりです。私は再びこの最終版で自分のアプリケーションのコードをコンパイルし、それが解決され

+0

を試してみてください。長さを確認して後でキャストすることができます。 –

+0

スタックをさらに印刷し、スタック内にmyMethodを呼び出すコードを追加します – andy

+0

そのエラーは、コンパイルしたバージョンとは異なるバージョンのクラスで実行していることを意味します。 – VGR

答えて

1

プロジェクトをクリーンアップして、もう一度ビルドしてください。また、実行時に別のバージョンをコンパイルして使用するために、JARファイルに頼っているかもしれません。

+0

WARには同じjarバージョンがバンドルされています。 – kswaughs

+0

クラスパスを確認しましたか?一度に1つのステップだけ問題を把握しようとしています。 –

0

ちょうど1つのオブジェクトの可変引数を使用して、この

myMethod("ClassName", "methodName", "message", new InstanceOfClass()); 
関連する問題