//自己写的一个类,参照了网上的一个佚名的帖子帖子和念月思灵的博客(博客园)(⊙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();
}
}