运行myeclipse时出现java.lang.NoClassDefFoundError的错误

我想获得网页的编码,在网上找了可以用chardet.jar中的方法实现,于是下载了它,导入我的工程中,然后用如下代码进行测试:
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;

import info.monitorenter.cpdetector.io.HTMLCodepageDetector;

import info.monitorenter.cpdetector.io.JChardetFacade;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;
public class WebEncoding {
private static CodepageDetectorProxy detector = CodepageDetectorProxy

.getInstance();

static {

detector.add(new HTMLCodepageDetector(false));

detector.add(JChardetFacade.getInstance());

}

/** 测试用例

  • @param args
    */
    public static void main(String[] args) {
    WebEncoding web=new WebEncoding();

try {

System.out.println("*******************");
System.out.println(web.getCharset("http://www.baidu.com/"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

  • @param strurl
  • 页面url地址,需要以 http://开始,例:http://www.pujia.com
  • @return
  • @throws IOException
    */
    public String getCharset(String strurl) throws IOException {
    // 定义URL对象
    URL url = new URL(strurl);
    // 获取http连接对象
    HttpURLConnection urlConnection = (HttpURLConnection) url
    .openConnection();
    ;
    urlConnection.connect();
    // 网页编码
    String strencoding = null;

/**

  • 首先根据header信息,判断页面编码
    */
    // map存放的是header信息(url页面的头信息)
    Map> map = urlConnection.getHeaderFields();
    Set keys = map.keySet();
    Iterator iterator = keys.iterator();

// 遍历,查找字符编码

String key = null;

String tmp = null;

while (iterator.hasNext()) {

key = iterator.next();

tmp = map.get(key).toString().toLowerCase();

// 获取content-type charset

if (key != null && key.equals("Content-Type")) {

int m = tmp.indexOf("charset=");

if (m != -1) {

strencoding = tmp.substring(m + 8).replace("]", "");

return strencoding;

}

}

}

/**

  • 通过解析meta得到网页编码
    */
    // 获取网页源码(英文字符和数字不会乱码,所以可以得到正确区域)
    StringBuffer sb = new StringBuffer();
    String line;
    try {
    BufferedReader in = new BufferedReader(new InputStreamReader(url
    .openStream()));
    while ((line = in.readLine()) != null) {
    sb.append(line);
    }
    in.close();
    } catch (Exception e) { // Report any errors that arise
    System.err.println(e);
    System.err
    .println("Usage: java HttpClient []");
    }
    String htmlcode = sb.toString();
    // 解析html源码,取出区域,并取出charset
    String strbegin = "

4个回答

另外关于你用run configurations进行的测试,首先你运行的是
org.mozilla.intl.chardet.HtmlCharsetDetecto
这个类,与WebEncoding无关,即是说两者用到的类不一定相同(你的还需要antlr包里的类)。
其次HtmlCharsetDetecto这个类的main方法是基于参数的,要成功运行当然需要你输入参数了。

就是说少了org/mozilla/intl/chardet/nsICharsetDetectionObserver这个类,一般这种问题是少了某个jar文件,你试试加载 jchardet-1.0.jar 看看?

run configurations我是没试过,只是main函数的话用run Appllication不就行了?

我测试了一下,还是缺少jar包,除了你用到的那两个jar包,你还需要再加一个antlr的jar包(我用的是antlr-2.7.6.jar),然后直接run application就行了。这是输出结果:
[code="java"]*******************
gb2312[/code]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问