日期:2014-05-20  浏览次数:20795 次

请问如何利用当前运行的一个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();