您好,这是Lonnie Ribordy,
我有一个我想写的程序,其中一部分使用名为JDom的第三方api, 当我编译我的程序时,它编译得非常好..但是,当我尝试运行它时,我在线程“main”获得异常java.lang.noClassDefFoundError org / jdom / input / SAXBuilder
我的程序如下......
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class COS extends JPanel implements ActionListener{
static JFrame f=new JFrame();
Image bgImage=null;
String message="";
public COS(){
try{
String xml="background.xml";
SAXBuilder builder=new SAXBuilder();
Document doc=builder.build(new File(xml));
Element root=null;
Element img=null;
String fimg=null;
try{
root=doc.getRootElement();
img=root.getChild("bgimage");
fimg=img.getText();
} catch(Exception e){
}
getFileImage(fimg);
} catch(Exception e){
message="File load failed: "+e.getMessage();
}
}
public void paintComponent(Graphics g){
if(bgImage!=null){
g.drawImage(bgImage,0,0,this);
}
else{
g.drawString(message,40,40);
}
}
public void getFileImage(String filein) throws IOException, InterruptedException{
FileInputStream in=new FileInputStream(filein);
byte[] b=new byte[in.available()];
in.read(b);
in.close();
bgImage=Toolkit.getDefaultToolkit().createImage(b);
MediaTracker mt=new MediaTracker(this);
mt.addImage(bgImage,0);
mt.waitForAll();
}
public void actionPerformed(ActionEvent e){
}
public static void main(String[] args){
COS newcos=new COS();
f.setSize(825,640);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(null);
newcos.setBounds(5,5,800,600);
f.setLocation(10,5);
f.getContentPane().add(newcos);
f.setVisible(true);
}
}
could anybody tell what's wrong?
答案 0 :(得分:1)
我发现了我的问题,当我将JDom安装到我的java中时我忘了将它包含在jre lib / ext中
现在一切正常,就像它应该有效一样,非常感谢你花时间帮助我
答案 1 :(得分:0)
我认为问题是你的类路径中有一个旧版本的JDom,并且正在你想要的那个版本之前加载。
首先,确保在类路径中没有其他版本的JDom(除了你已下载的版本)。找出
的位置正在从下载JWhich加载org.jdom.input.SAXBuilder
类,并使用它来检查从何处加载类。
其次,如果你正在使用maven检查另一个版本的JDOM没有将它作为依赖项包含,那么使用mvn dependency:tree
命令。