Commit ca45fd15 authored by YangZhaoJun1's avatar YangZhaoJun1

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

parent 5f3805ad
...@@ -44,6 +44,7 @@ public class TQuestion extends IdEntity<TQuestion> { ...@@ -44,6 +44,7 @@ public class TQuestion extends IdEntity<TQuestion> {
@Transient @Transient
List<Map<String,Object>> questionOptions; List<Map<String,Object>> questionOptions;
@Transient
List<TQuestionOptions> options; List<TQuestionOptions> options;
public TQuestion(String businessId) { public TQuestion(String businessId) {
......
...@@ -28,71 +28,77 @@ public class CompileUtil { ...@@ -28,71 +28,77 @@ public class CompileUtil {
java_class = "java "+fileName; java_class = "java "+fileName;
} }
Runtime r1 = Runtime.getRuntime(); Runtime runJavac = Runtime.getRuntime();
Process p1 = null;
Boolean comResult1 =true;
String result=""; String result="";
try { try {
//先编译java文件 //先编译java文件 java文件编译成功时不会有信息报出,所以此处只取错误信息
p1 = r1.exec(java, null, dir); StringBuilder message = new StringBuilder();
InputStreamReader ir = new InputStreamReader(p1.getInputStream(),"GBK"); Process javac = runJavac.exec(java, null, dir);
LineNumberReader input = new LineNumberReader(ir); InputStreamReader error = new InputStreamReader(javac.getErrorStream(),"GBK");
StringBuilder sb = new StringBuilder(); LineNumberReader errorInput = new LineNumberReader(error);
boolean firstLine = true; boolean firstLine = true;
String line; String line = "";
//取出输出结果 //取出输出结果
while ((line = input.readLine()) != null) { while ((line = errorInput.readLine()) != null) {
comResult1 = false;
if(!firstLine){ if(!firstLine){
sb.append(System.getProperty("line.separator")); message.append(System.getProperty("line.separator"));
}else{ }else{
firstLine = false; firstLine = false;
} }
sb.append(line); message.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;
}
} }
Runtime r2 = Runtime.getRuntime(); message.append(line);
Process p2 = null; error.close();
p2 = r2.exec(java_class, null, dir); errorInput.close();
InputStreamReader isr = new InputStreamReader(p2.getInputStream(),"GBK"); result = message.toString();
LineNumberReader lnr = new LineNumberReader(isr);
StringBuilder sbl = new StringBuilder();
boolean firstLine2 = true;
String line2;
while ((line2 = lnr.readLine()) != null) { if(result.equals("null")) {
if(!firstLine2){ //java文件编译成功,开始编译class文件
sbl.append(System.getProperty("line.separator")); StringBuilder classMessage = new StringBuilder();
}else{ firstLine = true;
firstLine2 = false; 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(); file.delete();
classFile.delete();
p2.waitFor();
p2.destroy();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); 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