-1

次のJAVAコードがあります。正常にコンパイルされますが、実行すると次のエラーが発生しました。

スレッド「メイン」での例外 java.lang.NoSuchMethodError: Edge.(LVertex;D)V at Test.main(Test.java:27)

どんな手掛かり?前もって感謝します!

import java.util.ArrayList;


class Vertex{
    public int key;
    public ArrayList<Edge> edges;
    public double minDistance = Double.POSITIVE_INFINITY;

    public Vertex(int key) {
        this.key = key;
        edges = new ArrayList<Edge>();
    }
}

class Edge{
    public Vertex target;
    public double weight;

    public Edge(Vertex t, double w) {
        target = t;
        weight = w;
    }
}

public class Test {
    public static void main(String[] args) {
        Edge e = new Edge(new Vertex(1), 1.0);
    }
}
4

1 に答える 1

1

すべての.classファイルを削除し、それらをすべて適切に再コンパイルした場合、その例外を取得することはできません。

例外は、1つのクラス(この場合はDijkstra)が、ロードしてEdge(Vertex[], double)いるバージョンに存在しないメソッド(この場合は署名付きのコンストラクター)を使用しようとしていることを示しています。Edge

しかし、ソースコードには、コンストラクターが存在すると書かれています。私はそれを見ることができます。

矛盾!

私が考えることができる唯一の考えられる説明は、浮かんでいるコピーが複数Edge.classあり、ランチャーのクラスパスがJVMに間違ったものを使用するように指示しているということです。つまり、再コンパイルしなかった古いものです!


それは奇妙だ。実行エラーなしで、Linuxマシンでまったく同じファイルをコンパイルして実行します。

それは簡単に説明できます。Linuxマシンにファイルの古い/古いコピーがありません。

于 2013-03-11T03:01:00.420 に答える