有人能告诉我为什么我会收到此错误,以及如何解决问题?
线程“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) at xmlprocessing.api.STAXModifyCV.main(STAXModifyCV.java:68) 引起:java.lang.ClassNotFoundException:org.codehaus.stax2.ri.Stax2ReaderAdapter 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:190) at 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();
答案 0 :(得分:5)
你需要确保正确的Woodstox在你的道路上。基本上,您正在使用在该jar中实现的类,但由于jar不在路径中,因此Java不知道您引用了哪个类。
答案 1 :(得分:3)
这意味着找到了一个不包含预期类的.class文件,因为该包与目录结构不对应,或者因为文件在编译后被重命名。还有其他原因,但这是最常见的。
答案 2 :(得分:0)
抱歉,我对3个答案投了反对,但突然有了疑问,需要仔细检查我的想法......结果却比我想象的要复杂得多。但是我在这里找到了一个非常完整的答案: http://mindprod.com/jgloss/runerrormessages.html#NOCLASSDEFFOUNDERROR