运行简单代码时获取java.lang.NoSuchMethodError

时间:2013-03-11 02:40:12

标签: java

我有以下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);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您删除了所有.class文件并重新编译了所有正确,那么获取该异常是不可能的。

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

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

矛盾!

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


  

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

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