请问如何利用当前运行的一个java程序去执行另外一个java程序
我的意思是这样的,一个java程序正在运行,比如其源代码为
public class running{
public static void main(string[] args){
System.out.println("helloworld");
////////////////////////////////在此行调入waiting程序并且编译,动态运行
}
}
我另外有一个程序,存在硬盘中,是.java文件,该程序若如下
public class waitting{
public static void main(string[] args){
System.out.println("how are you ");
}
}
如何达到运行running的时候又编译而且运行waiting
------解决方案--------------------
这个问题貌似我以前又答过!!如果你能看得明白我以前修改过这个例子,你就明白了!!!!!
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.io.PrintWriter;
import
java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @author Every E-mail/MSN:mwgjkf@hotmail.com
* QQ:30130942
* @version 创建时间:Dec 30, 2008 3:34:57 PM
* 类说明:
*
*/
public class RuntimeCode{
/**编译器*/
private static com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();
/**等待用户输入JavaCode,然后编译、执行*/
public static void main(String[] args) throws Exception{
String code = "";
DataInputStream bd = new DataInputStream(System.in);
byte[] brray= new byte[200];
int i = bd.read(brray);
code = new String(brray,0,i);
run(compile(code));
System.out.println(code);
}
/**编译JavaCode,返回临时文件对象*/
private synchronized static File compile(String code)throws
IOException,Exception{
File file;
//在用户当前文件目录创建一个临时代码文件
file=File.createTempFile("JavaCode",".java",new File(System.getProperty("user.dir")));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename=file.getName();
String classname=getClassName(filename);
System.out.println(classname);
//将代码输出到文件
PrintWriter out=new PrintWriter(new FileOutputStream(file));
out.write("public class "+classname+"{"+"public static void main(String []agrs) "+"{");
out.write(code);
out.write("}}");
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args=new String[]{"-d",System.getProperty("user.dir"),filename};
System.out.println("user.dir-------->"+System.getProperty("user.dir"));
//返回编译的状态代码
int status=javac.compile(args);
//处理编译状态
System.out.println(status);
return file;
}
public void main(){
}
/**执行刚刚编译的类文件*/
private static synchronized void run(File file){
//当虚拟机退出时,删除此临时编译的类文件
//获得文件名和类名字
String filename = file.getName();
String classname = getClassName(filename);
System.out.println("filename-------->"+filename);
System.out.println("classname----"+classname);
new File(file.getParent(),classname+".class").deleteOnExit();