-1

我有以下 JAVA 代码。它编译得很好,但是当我运行它时,我得到了以下错误:

线程“main”中的异常 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 文件并正确重新编译它们,则不可能获得该异常。

异常告诉您一个类(在本例中为 Dijkstra)正在尝试使用其正在加载Edge(Vertex[], double)的版本中不存在的方法(在本例中为带有签名的构造函数) 。Edge

但是你的源代码说构造函数确实存在。我能看到它。

矛盾!

我能想到的唯一可能的解释是有多个Edge.class浮动副本,并且您的启动器的类路径告诉 JVM 使用错误的副本;即您没有重新编译的旧版本!


有点奇怪。我在 linux 机器上编译并运行完全相同的文件而没有运行错误。

这很容易解释。您的 Linux 机器上没有该文件的旧/陈旧副本。

于 2013-03-11T03:01:00.420 回答