【问题标题】:Why am I getting a NoClassDefFoundError?为什么我会收到 NoClassDefFoundError?
【发布时间】:2010-10-29 22:40:10
【问题描述】:

谁能告诉我为什么会出现这个错误,以及如何解决这个问题?

线程“main”中的异常 java.lang.NoClassDefFoundError: org/codehaus/stax2/ri/Stax2ReaderAdapter 在 org.codehaus.staxmate.dom.DOMConverter._build(DOMConverter.java:188) 在 org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:171) 在 org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:152) 在 org.codehaus.staxmate.dom.DOMConverter.buildDocument(DOMConverter.java:131) 在 xmlprocessing.api.STAXModifyCV.main(STAXModifyCV.java:68) 引起:java.lang.ClassNotFoundException:org.codehaus.stax2.ri.Stax2ReaderAdapter 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 5 更多 Java 结果: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();

【问题讨论】:

  • 为什么这些答案都投了反对票?

标签: java


【解决方案1】:

您需要确保正确的 Woodstox 在您的路径中。基本上,您使用的是在该 jar 中实现的类,但由于该 jar 不在路径中,Java 不知道您引用的是什么类。

【讨论】:

    【解决方案2】:

    这意味着找到了一个不包含预期类的 .class 文件,可能是因为该包与目录结构不对应,或者是因为该文件在编译后被重命名。还有其他原因,但这是最常见的。

    【讨论】:

      【解决方案3】:

      抱歉,我对 3 个答案投了反对票,但突然有疑问,需要仔细检查我的想法……结果比我想象的要复杂。但是,我在这里为您找到了一个非常完整的答案: http://mindprod.com/jgloss/runerrormessages.html#NOCLASSDEFFOUNDERROR

      【讨论】:

      • 我已经编辑了剩下的两个答案,所以你现在可以删除你的反对票了。
      猜你喜欢
      • 1970-01-01
      • 2020-09-19
      相关资源
      最近更新 更多