miss2671228 2015-05-15 02:03 采纳率: 100%
浏览 5773
已采纳

如何使用java命令调用某个jar文件中的方法?

小弟前段时间制作了一个爬取某个新闻页面的类,并将其制作成了jar包,请问如何动态加载这个r包,请问下步如何实现?求帮助。
源码如下:

 package Test01;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Demo2 {
    public static void main(String[] args) {
        URL[] urls = new URL[] {};
         MyClassLoader classLoader = new MyClassLoader(urls, null);
        try {
            classLoader.addJar(new File("E:\\JoImages\\JsoupBaidu\\com.sdzw.test.spider.baidu.jar").toURI().toURL());
            Class<?> testDAO = classLoader.loadClass("com.sdzw.test.dao.TestDAO");
            Method method = testDAO.getDeclaredMethod("RunBaidu");
            method.invoke(null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * URLClassLoader的子类
     * 添加addJar方法
     * @author Administrator
     *
     */
    private static class MyClassLoader extends URLClassLoader {

            public MyClassLoader(URL[] urls) {
                super(urls);
            }

            public MyClassLoader(URL[] urls, ClassLoader parent) {
                super(urls, parent);
            }

            public void addJar(URL url) {
                this.addURL(url);
            }

        }
}

运行结果是这样的:

 java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at Test01.Demo2.main(Demo2.java:16)
Caused by: java.lang.NoClassDefFoundError: org/jsoup/Jsoup
    at com.sdzw.test.dao.TestDAO.RunBaidu(TestDAO.java:15)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 6 more

jar文件的源码是这样的:

 package com.sdzw.test.dao;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TestDAO {

    public static void RunBaidu(){
        Document doc;
        String url="http://news.baidu.com/";
        BaiduDAO dao =new BaiduDAO();
        try {
            doc=Jsoup.connect(url).timeout(5000).get();
            Elements mon=doc.select("#body a[mon]");
            for(Element e: mon){
                if(e.text().trim().length()>1&&e.attr("mon").length()>1){
                    String linkHref=e.attr("href");
                    String linkText=e.text().trim();
                    if(linkHref.startsWith("http://news.ifeng")){
                        dao.saveFengHuang(linkText, linkHref);
                    }else if(linkHref.indexOf("baijia.baidu.com")!=-1){
                        System.out.println(linkHref);
                        dao.saveBaijia(linkText, linkHref);
                    }else if(linkHref.startsWith("http://news.xinhuanet.com")){
                        dao.savaXinhua(linkText, linkHref);
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

    public static void saveBaijia(String linkText,String linkHref) throws FileNotFoundException, IOException{

        //将标题转换为合法标题
        linkText=LinkTextSafe(linkText);

        //创建一个以标题为名称的txt文档,并将标题存放到文档中
        dao.SaveFile("news/Baijia/"+linkText+".txt", linkText);

        //爬取页面中的指定内容,并将其存入相对应的文件当中
        List<String> getContent = getContent(linkHref,"span.time", "div.article-author-time a", "div.article-detail p");
        for(String content : getContent){
            dao.SaveFile("news/Baijia/"+linkText+".txt", content);
        }

    }
  • 写回答

4条回答 默认 最新

  • 逝_去_的_光_阴 2015-05-15 02:27
    关注

    你先cmd试试你的jar能不能正常运行,
    怀疑你的jar包是半成品,没有Jsoup的相关文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛