2014-04-20 2 views
0

숙제를위한 프로그램을 작성 중이며 해결할 수없는 문제가 발생합니다. 문제는 임의의 주어진 노드에서의 랜덤 워크 종료 확률을 시뮬레이션하는 것과 관련됩니다 (배경과 관련이 있으며 문제와 관련이 없습니다). 나는 각각의 노드 객체 (UndirectedGraph와 NodeEntry)를 담기 위해 해시 맵을 사용하는 클래스를 작성했다. 테스트 하네스도 작성했습니다.Java- java.lang.NoClassDefFoundError, classpath 문제가 아닙니다.

원래이 모든 파일은 하나의 파일에 있었지만 UndirectedGraph와 NodeEntry를 별도의 패키지로 이동하기로 결정했습니다. 원인은 옳은 것 같습니다. testHarness 컴파일 수 있도록 내가 고쳐 모든 것을받은 적이 있지만 런타임에 나는 다음과 같은 얻을 : 둘러보고에서

Exception in thread "main" java.lang.NoClassDefFoundError: GraphWalker/NodeEntry 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531) 
at java.lang.Class.getMethod0(Class.java:2774) 
at java.lang.Class.getMethod(Class.java:1663) 
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 
Caused by: java.lang.ClassNotFoundException: GraphWalker.NodeEntry 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 6 more 

내가 이것에 대한 몇 가지 해답을 찾을 수, 클래스가 클래스 경로에없는 주로있다. 문제는 같은 폴더에이 모든 파일이 있고, 현재 폴더가 항상 클래스 경로에 있다는 것입니다. 여기

코드의 복사본을 단축 것 :

testHarness :

import java.util.*; 
import GraphWalker.*; 

public class testHarness { 

    public static void main (String args[]) { 
     new testHarness(); 
    } 


    public testHarness() { 
     GraphWalker.UndirectedGraph graph = new GraphWalker.UndirectedGraph(3); 
//  System.out.println(graph.containsNode(1)); 
     graph.addNode(1); 
     graph.addNode(2); 
     graph.addNode(3); 

UndirectedGraph :

package GraphWalker; 
import java.util.*; 

public class UndirectedGraph { 

    /* 
    * Based in part on UndirectedGraph.java by Keith Schwarz ([email protected]) 
    */ 

    public HashMap graphMap; 

    public UndirectedGraph(int numNodes) { 
     this.graphMap = new HashMap(numNodes); 
    } 

    public void addNode (Integer nodeNum) { 
     graphMap.put(nodeNum, new NodeEntry(1.0f,0.0f)); 
    } 

NodeEntry :

package GraphWalker; 
import java.util.*; 


public class NodeEntry { 

    // four inherent values 
    // credit is the current credit of the node 
    // nextCredit holds the credit for the next step 
    // adjList holds a list of adjacent node IDs 
    // degree holds the number of neighbors 
    public Float credit; 
    public Float nextCredit; 
    public ArrayList adjList; 
    public Integer degree; 


    public NodeEntry(Float credit, Float nextCredit) { 
     this.credit = credit; 
     this.nextCredit = nextCredit; 
     this.adjList = new ArrayList(); 
     this.degree = 0; 
    } 


    public void addEdge(Integer neighbor) { 
     this.adjList.add(neighbor); 
     this.degree += 1; 
    } 

각 클래스는 아주 조금 더있다 코드와 관련이 있다고는 생각하지 않습니다. 난 우분투 12.04에서 일하고있어 컴파일하고 명령 줄에서 실행하고 Geany (간단한 IDE)를 사용하여 같은 동작을합니다.

어떤 도움이 필요합니까?

+0

경우 ' 알아 냈어, 원래의 질문에 대한 부록 대신 대답으로 해결책을 제공하십시오. – Makoto

+0

질문에 답을 적어 두지 마십시오. 우리는 당신이 대답으로 찾은 것을 나눌 수 있기를 바랍니다. – Flexo

+0

classpath가 문제의 일부인지 확실히 확인하십시오. 작업 디렉토리와 클래스 경로는 GraphWalker 패키지 디렉토리를 포함하는 디렉토리를 가리켜 야하고 실제로 GraphWalker 디렉토리는 포함시키지 말아야한다. 나는 그것이 어떻게 든 망쳐 놓은 것으로 의심한다. –

답변

0

Alrighty, 문제는 패키지 파일이 별도의 폴더 (패키지의 이름이 GraphWalker 인 경우)에 있어야한다는 것이 었습니다. 나는 그것이 잘 컴파일 된 이유에 대해서는 명확하지 않지만 실행 시간에 패키지를 찾았을 때 그들은 그들 자신의 폴더에있을 것을 요구/요구했을 것 같다.

내가 고려하지 것이라고 클래스 경로 문제, 자체, 파일들이 될 필요가 그냥 폴더, 클래스 패스에 있던 폴더에 있었다 찾았다되고 있기 때문이다.