Sunday, September 25, 2011

Java program for Running System command (test one)

使用java 去compile文件再执行local file
import java.io.*;




//use this thread to evaluate java class file

public class RunJava extends Thread {

public static final int FIVE_SECONDS = 5000;

private Process p = null;

// added in for java sandbox security control

private String cmd = "java -Djava.security.manager -Djava.security.policy==\"E:/Program Files/WampServer/gradingsystem/gspolicy\" -classpath ";

private File txt = null;



public RunJava(String classDir, String classname, String outputDir){

cmd = cmd +"\"" + classDir + "\" " + classname;

System.out.println(cmd);

txt = new File(outputDir + "/" + classname + "_RunOutput.txt");

try{

if(!txt.exists())

txt.createNewFile();

}

catch(Exception e){

System.err.println(e.getMessage());

}

}

public void run(){

Runtime jRun = Runtime.getRuntime();

try {

p = jRun.exec(cmd);



//get input stream, and write content to output file

BufferedInputStream in = new BufferedInputStream(p.getInputStream());

BufferedReader br = new BufferedReader(new InputStreamReader(in));

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(txt)));

StringBuilder sb = new StringBuilder("");

String s = "";

while ((s = br.readLine()) != null)

sb.append(s);

pw.print(sb.toString());

pw.close();

p.waitFor();

} catch (Exception e) {

System.err.println(e.getMessage());

}

}

public void killThread(){

//kill RunJava, and delete output file

p.destroy();

if (txt.exists())

txt.delete();

}



public static void main(String[] args) {

//take input string from outside

String classDir = args[0];

String classname = args[1];

String outputDir = args[2];



//for debug

/*System.out.println("classDir: " + classDir);

System.out.println("classname: " + classname);

System.out.println("outputDir: " + outputDir);*/



try {

//Start a new thread

RunJava run = new RunJava(classDir, classname, outputDir);

run.start();



//limit running time

long start = System.currentTimeMillis();

long end = start + FIVE_SECONDS;

do{

Thread.sleep(100);

if(System.currentTimeMillis()> end)

run.killThread();

} while(run.getState().toString().equals("RUNNABLE"));



System.out.println("Program Finished!");

}

catch (Exception e) 

{

System.err.println(e.getMessage());

}

}

}

No comments:

Post a Comment