Commit ca45fd15 authored by YangZhaoJun1's avatar YangZhaoJun1

编译Java文件时获取报错信息

parent 5f3805ad
......@@ -44,6 +44,7 @@ public class TQuestion extends IdEntity<TQuestion> {
@Transient
List<Map<String,Object>> questionOptions;
@Transient
List<TQuestionOptions> options;
public TQuestion(String businessId) {
......
......@@ -28,71 +28,77 @@ public class CompileUtil {
java_class = "java "+fileName;
}
Runtime r1 = Runtime.getRuntime();
Process p1 = null;
Boolean comResult1 =true;
Runtime runJavac = Runtime.getRuntime();
String result="";
try {
//先编译java文件
p1 = r1.exec(java, null, dir);
InputStreamReader ir = new InputStreamReader(p1.getInputStream(),"GBK");
LineNumberReader input = new LineNumberReader(ir);
StringBuilder sb = new StringBuilder();
//先编译java文件 java文件编译成功时不会有信息报出,所以此处只取错误信息
StringBuilder message = new StringBuilder();
Process javac = runJavac.exec(java, null, dir);
InputStreamReader error = new InputStreamReader(javac.getErrorStream(),"GBK");
LineNumberReader errorInput = new LineNumberReader(error);
boolean firstLine = true;
String line;
String line = "";
//取出输出结果
while ((line = input.readLine()) != null) {
comResult1 = false;
while ((line = errorInput.readLine()) != null) {
if(!firstLine){
sb.append(System.getProperty("line.separator"));
message.append(System.getProperty("line.separator"));
}else{
firstLine = false;
}
sb.append(line);
}
input.close();
ir.close();
result = sb.toString();
/*if(input.readLine()!=null) {
comResult1 = false;
}*/
if(!comResult1) {
return result;
}
String classUrl = fileUrl+fileName+".class";
File classFile = new File(classUrl);
while(!classFile.exists()) {
Thread.sleep(10);
if(!comResult1) {
break;
}
message.append(line);
}
Runtime r2 = Runtime.getRuntime();
Process p2 = null;
p2 = r2.exec(java_class, null, dir);
InputStreamReader isr = new InputStreamReader(p2.getInputStream(),"GBK");
LineNumberReader lnr = new LineNumberReader(isr);
message.append(line);
error.close();
errorInput.close();
result = message.toString();
StringBuilder sbl = new StringBuilder();
boolean firstLine2 = true;
String line2;
while ((line2 = lnr.readLine()) != null) {
if(!firstLine2){
sbl.append(System.getProperty("line.separator"));
}else{
firstLine2 = false;
if(result.equals("null")) {
//java文件编译成功,开始编译class文件
StringBuilder classMessage = new StringBuilder();
firstLine = true;
boolean wrong = true;
String classUrl = fileUrl + fileName + ".class";
File classFile = new File(classUrl);
while (!classFile.exists()) {
Thread.sleep(10);
}
Runtime runClass = Runtime.getRuntime();
Process Class = runClass.exec(java_class, null, dir);
InputStreamReader successIsr = new InputStreamReader(Class.getInputStream(), "GBK");//成功信息
InputStreamReader errorIsr = new InputStreamReader(Class.getErrorStream(), "GBK");//失败信息
LineNumberReader successLnr = new LineNumberReader(successIsr);
LineNumberReader errorLnr = new LineNumberReader(errorIsr);
while ((line = successLnr.readLine()) != null) {
wrong = false;
if (!firstLine) {
classMessage.append(System.getProperty("line.separator"));
} else {
firstLine = false;
}
classMessage.append(line);
}
if(wrong){
while ((line = errorLnr.readLine()) != null) {
if (!firstLine) {
classMessage.append(System.getProperty("line.separator"));
} else {
firstLine = false;
}
classMessage.append(line);
}
}
sbl.append(line2);
result = classMessage.toString();
successLnr.close();
successIsr.close();
errorLnr.close();
errorIsr.close();
classFile.delete();
Class.waitFor();
Class.destroy();
}
lnr.close();
isr.close();
result = sbl.toString();
file.delete();
classFile.delete();
p2.waitFor();
p2.destroy();
} catch (IOException e) {
e.printStackTrace();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment