2013-03-11 99 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機器上沒有舊/舊文件的副本。