我有以下JAVA代码。它编译得很好,但是当我运行它时,我得到以下错误:
线程“main”中的异常java.lang.NoSuchMethodError:Edge。(LVertex; D)V 在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);
}
}
答案 0 :(得分:1)
如果您删除了所有.class文件并重新编译了所有正确,那么获取该异常是不可能的。
该异常告诉您一个类(在本例中为Dijkstra)正在尝试使用Edge(Vertex[], double)
版本中不存在的方法(在本例中为具有签名Edge
的构造函数)它正在加载。
但是你的源代码说构造函数确实存在。我可以看到它。
矛盾!
我能想到的唯一可能的解释是,Edge.class
有多个副本浮动,你的启动程序的类路径告诉JVM使用错误的副本;即一个你不能重新编译的旧版本!
这很奇怪。我在Linux机器上编译并运行完全相同的文件而没有运行错误。
这很容易解释。您的Linux机器上没有该文件的旧/旧版本。