java运行外部类文件,运行dos命令,获取类实例

//自己写的一个类,参照了网上的一个佚名的帖子帖子和念月思灵的博客(博客园)(⊙o⊙)…,希望能有人看~~

//可以运行dos命令,(非静态函数,至少要设置"cmd 命令"参数才能运行)

//获取外部类实例(这个估计要配合接口使用~~)(静态函数)

//运行外部类的静态函数(静态函数)

//有两个要注意的地方,

//一是类名参数最好是包含包名的

//二是像static void main(String[]strs) 这种函数的参数是只有一个 类型为String[2] ;所以调用时要使用 new Object[]{new String[]{两个参数}}

//(⊙o⊙)…,有bug请发我邮箱suweizhao3128@163.com

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.lang.reflect.Method;

//import webgames.app.WebGameApp;

public class AppExcuter{

 /**
  *
  * 输入命令运行程序,参数和路径为可选参数
  * @param cmd 命令
  * @param params 参数
  * @param envp 环境变量
  * @param dir 路径
  */
 private String cmd = null;
 private String[]params = null;
 private String[] envp = null ;
 private File dir = null ;
 private long delay = 500 ;
 public long getDelay() {
  return delay;
 }
 /**
  * 设置进程等待时间
  * @param delay
  */
 public void setDelay(long delay) {
  this.delay = delay;
 }
 
 public String getCmd() {
  return cmd;
 }
 /**
  * 设置命令
  * @param cmd
  */
 public void setCmd(String cmd) {
  this.cmd = cmd;
 }
 
 public String[] getParams() {
  return params;
 }
 /**
  * 设置参数
  * @param params
  */
 public void setParams(String[] params) {
  this.params = params;
 }
 
 public String[] getEnvp() {
  return envp;
 }
 /**
  * 设置环境变量,我也不是很懂
  * @return
  */
 public void setEnvp(String[] envp) {
  this.envp = envp;
 }

 public File getDir() {
  return dir;
 }
 /**
  * 设置目录
  * @param dir
  */
 public void setDir(File dir) {
  this.dir = dir;
 }
 
 /**
  * 使用设定的类名,构造函数方法参数获取到类的实例,
  * 注:如main函数的是一个参数{String[2]};
  * 注:类名最好是包含包名的详细类名
  * @return
  */
 public static Object  GetClassInstance(String className,Object[]params)
 {
  try
  {
   //获取到参数类型列表
   Class<?>[] paramsTypes = null ;
   if(params != null)
   {
    paramsTypes = new Class[params.length];
    for(int i = 0; i < params.length ; i ++ )
    {
     paramsTypes[i] = params[i].getClass();
    }
   }
   //获取到类
   Class<?> invokedClass = Class.forName(className);
   //获取类实例
   Object classObject = invokedClass.getConstructor(paramsTypes).newInstance(params);
   //返回结果
   return classObject ;
  }
  catch (Exception e)
  {
   System.err.println(e.toString());
   return null ;
  }
 }
 /**
  * 使用设定的类名,方法,运行外部类的静态方法
  * 注:类名最好是包含包名的详细类名
  * @return 返回调用的结果
  */
 public static Object RunStaticMethod(String className,String methodName,Object[]params)
 {
  try
  {
   //获取到参数类型列表
   Class<?>[] paramsTypes = null ;
   if(params != null)
   {
    paramsTypes = new Class[params.length];
    for(int i = 0; i < params.length ; i ++ )
    {
     paramsTypes[i] = params[i].getClass();
    }
   }
   //获取到类
   Class<?> invokedClass = Class.forName(className);
   //获取静态函数
   Method invokedMethod = invokedClass.getDeclaredMethod(methodName, paramsTypes) ;
   //调用静态函数
   Object result = invokedMethod.invoke(null,params );
   //返回结果
   return result ;
  }
  catch (Exception e)
  {
   System.err.println(e.toString());
   return null ;
  }
 }
 
 /**
  * 使用设定的命令,参数,环境变量,路径,等待时间,运行外部程序,所以调用本函数之前请至少设置好命令
  * @return
  */
 public String RunOtherApp()
 {
   try
   {
    if(cmd == null)
     return null;
   
    Runtime runtime = Runtime.getRuntime();
    Process process = null ;
    String cmdStr  = cmd;
    if(params != null)
     for(int i = 0 ; i < params.length ; i ++)
      cmdStr += " "+params[i];
    process = runtime.exec(cmdStr, envp, dir);
    if(process == null)
     return null;
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
   String resultStr = "" ;
   resultStr = "" ;
    String buffer = "";
    while((buffer=bufferedReader.readLine()) != null)
     resultStr += buffer ;
    bufferedReader.close();
   process.wait(delay);
   return resultStr ;
         }
   catch (Exception e)
   {
    System.err.println(e.toString());
             return null ;
         }
 }
 public static void main(String[] main)
 {
  //AppExcuter.RunStaticMethod("webgames.app.WebGameApp", "main", new Object[]{new String[]{"1","2"}});
  //WebGameApp app = (WebGameApp)AppExcuter.GetClassInstance("webgames.app.WebGameApp",null );
  //app.Start();
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值