java 使用URLClassLoader调用外部jar

之前写的一个远程调用,现在写一个调用外部的JAR,再用反射调用里面的方法,从网上照抄的例子,但运行老遇到问题,查了蛮久,才改成功,写出来分享一下

 

建一个类

 

***********************************注意红字**********************************************

package comdom;

import iExpOption.IExpOptionFunction;

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

public class JarUtil extends URLClassLoader {
 private JarUtil jarutil=null;

 public JarUtil(URL url) {
  super(new URL[] { url });
  
 }
 
 public static Object executeJarClass(String jarPath, String classPath,  
 String methodName, Object... args) {  
  try
  {  
 
   Class<IExpOptionFunction> object = (Class) JarUtil.getClassObject(jarPath, classPath);
   Method[] ms=object.getMethods();
   for(int i=0;i<ms.length;i++)
   {
    System.out.println(ms[i].getName());
   }
   Method m=object.getMethod("test", null);
   System.out.println(m.invoke(object.newInstance(), null));

   return m.invoke(object.newInstance(), null); 
  }
  catch (Exception ex)
  {  
   ex.printStackTrace();  
  }  
   return null;  
 }  
 


  public static Object getClassObject(String jarPath, String classPath)
  {  
  try
  { 

//必须要准确的jar的url,不然它会抛出找不到方法的异常 ,所以用f.toURL比较保险啦~

    File f=new File(jarPath);   
   JarUtil t = new JarUtil(f.toURL());   
    Class<IExpOptionFunction> ief=(Class<IExpOptionFunction>) t.loadClass(classPath);
   System.out.println(c);
   
  return ief;
  }
  catch (Exception ex)
  {  
     ex.printStackTrace();  
  }  
   return null;  
 } 
 
 
  public static void main(String[] arg)
  {

//调用CrystalReportExpService.jar里的expOption包里的ExpOptionFunction类
   executeJarClass("C://testJar//CrystalReportExpService.jar", "expOption.ExpOptionFunction",null);
  }

 

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值