2013-03-11 60 views
-1

我有以下JAVA代码。它编译好,但是当我运行它时,我得到以下错误:运行简单代码时获取java.lang.NoSuchMethodError

线程“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); 
    } 
} 
+0

您的'.class'文件已过期。 – SLaks 2013-03-11 02:43:03

+0

我在我的NetBean上尝试它,它的编译+运行正常。 – goravine 2013-03-11 02:44:07

+0

你没有发布有问题的代码/类,Dijkstra.java! – 2013-03-11 02:48:53

回答

1

如果您已经删除了所有.class文件中并重新编译他们都正确这是不可能得到那个例外。

唯一的例外是告诉你,一个类(在这种情况下,Dijkstra算法)正在尝试使用的方法(在这种情况下,与签名Edge(Vertex[], double)一个构造函数)不会在Edge的版本,它加载存在。

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

矛盾!

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


It's weird. I compile and run exactly the same file on a linux machine without the running error.

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