2010-10-29 187 views
1

有人能告訴我爲什麼我得到這個錯誤,以及如何解決這個問題?爲什麼我得到一個NoClassDefFoundError?

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/stax2/ri/Stax2ReaderAdapter at org.codehaus.staxmate.dom.DOMConverter._build(DOMConverter.java:188) at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:171) at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:152) at org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:131) at xmlprocessing.api.STAXModifyCV.main(STAXModifyCV.java:68) Caused by: java.lang.ClassNotFoundException: org.codehaus.stax2.ri.Stax2ReaderAdapter at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 5 more Java Result: 1

我寫了下面的代碼:

//-*-*- 
    FileInputStream input = new FileInputStream("cv.xml"); 
    XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(input); 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

    //-*-*- get new entries from input stream 
    System.out.println("<< Sahar CV >>\n -> Modify the first reference\n ** Modify The Name **"); 
    System.out.print(" Enter degree : "); 
    String degree = in.readLine(); 
    System.out.print(" Enter first name : "); 
    String fName = in.readLine(); 
    System.out.print(" Enter last name : "); 
    String lName = in.readLine(); 
    System.out.println(" ** Modify The Address ** "); 
    System.out.print(" Enter new city : "); 
    String newCity = in.readLine(); 
    System.out.print(" Enter new country : "); 
    String newCountry = in.readLine(); 

    //-*-*- let the reader point at the first "reference" element 
    int eventType; 
    boolean ref = false, fname = false; 
    while (!ref && reader.hasNext()) { 
     eventType = reader.next(); 
     switch (eventType) { 
      case XMLEvent.START_ELEMENT: 
       if (reader.getLocalName().equalsIgnoreCase("references")) { 
        ref = true; 
        break; 
       } 
     } 
    } 
    System.out.println("I am here"); 

    //-*-*- start modification 
    Document doc = new DOMConverter().buildDocument(reader); 
    Element firstRef = (Element)doc.getElementsByTagName("reference").item(0); 
    NodeList name = (NodeList)firstRef.getElementsByTagName("name"); 
    //-*-*- modify the degree (Dr. , Eng. , Dev. ,etc) 
    Attr att = (Attr)name.item(0).getAttributes().item(0); 
    ((Node)att).setNodeValue(degree); 
    //-*-*- modify first name 
    NodeList firstName = (NodeList)firstRef.getElementsByTagName("fname"); 
    NodeList firstNameChilds = (NodeList)firstName.item(0).getChildNodes(); 
    ((Node)firstNameChilds.item(0)).setNodeValue(fName); 
    //-*-*- modify last name 
    NodeList lastName = (NodeList)firstRef.getElementsByTagName("lname"); 
    NodeList lastNameChilds = (NodeList)lastName.item(0).getChildNodes(); 
    ((Node)lastNameChilds.item(0)).setNodeValue(lName); 
    //-*-*- modify city 
    NodeList city = (NodeList)firstRef.getElementsByTagName("city"); 
    NodeList cityChilds = (NodeList)city.item(0).getChildNodes(); 
    ((Node)cityChilds.item(0)).setNodeValue(newCity); 
    //-*-*- modify country 
    NodeList country = (NodeList)firstRef.getElementsByTagName("country"); 
    NodeList countryChilds = (NodeList)country.item(0).getChildNodes(); 
    ((Node)countryChilds.item(0)).setNodeValue(newCountry); 

    reader.close(); 
    input.close(); 
    //-*-*- write DOM document 
    FileOutputStream out = new FileOutputStream("cv.xml"); 
    XMLStreamWriter sw = XMLOutputFactory.newInstance().createXMLStreamWriter(out); 

    new DOMConverter().writeDocument(doc, sw); 
    sw.close(); 
    out.close(); 
+1

爲什麼所有的這些答案都是反對票? – duffymo 2010-10-29 23:44:15

回答

0

對不起,我對3個答案投了棄權票,但突然有疑問,需要仔細檢查我的想法......結果比我想象的要複雜。然而,我在這裏找到了一個非常完整的答案: http://mindprod.com/jgloss/runerrormessages.html#NOCLASSDEFFOUNDERROR

+0

我編輯了其餘的答案,所以你現在可以刪除你的downvote。 – akf 2010-10-30 02:34:00

+0

謝謝,我剛剛做到了。 – Damien 2010-10-30 17:53:33

4

您需要確保正確的Woodstox是在你的路徑。基本上,您使用的是在該jar中實現的類,但是因爲該jar不在路徑中,Java不知道您引用的是哪個類。

3

這意味着發現一個不包含預期類的.class文件,可能是因爲該包與目錄結構不對應,或者因爲該文件在編譯後被重命名。還有其他原因,但這是最常見的。

相關問題