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(); message.append(line);
ir.close(); error.close();
result = sb.toString(); errorInput.close();
/*if(input.readLine()!=null) { result = message.toString();
comResult1 = false;
}*/
if(!comResult1) {
return result;
} if(result.equals("null")) {
String classUrl = fileUrl+fileName+".class"; //java文件编译成功,开始编译class文件
StringBuilder classMessage = new StringBuilder();
firstLine = true;
boolean wrong = true;
String classUrl = fileUrl + fileName + ".class";
File classFile = new File(classUrl); File classFile = new File(classUrl);
while(!classFile.exists()) { while (!classFile.exists()) {
Thread.sleep(10); Thread.sleep(10);
if(!comResult1) {
break;
} }
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;
} }
Runtime r2 = Runtime.getRuntime(); classMessage.append(line);
Process p2 = null;
p2 = r2.exec(java_class, null, dir);
InputStreamReader isr = new InputStreamReader(p2.getInputStream(),"GBK");
LineNumberReader lnr = new LineNumberReader(isr);
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;
} }
sbl.append(line2); if(wrong){
while ((line = errorLnr.readLine()) != null) {
if (!firstLine) {
classMessage.append(System.getProperty("line.separator"));
} else {
firstLine = false;
} }
lnr.close(); classMessage.append(line);
isr.close(); }
result = sbl.toString(); }
file.delete(); result = classMessage.toString();
successLnr.close();
successIsr.close();
errorLnr.close();
errorIsr.close();
classFile.delete(); classFile.delete();
p2.waitFor(); Class.waitFor();
p2.destroy(); Class.destroy();
}
file.delete();
} 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