想达到的目标:在Test1主类中,调用Test2.getTest2, 如果报错,将报错信息输出sendResponse("", "错误日志", "0001");
相关类:Test1.java、Test2.java、Test3.java
Test1.java
public static void main(String[] args) throws Exception {
Test1 t =new Test1();
t.run();
}
 public void run(){
 Test2 t = new Test2();
 t.getTest2();
try {
if (1 != t.getTest2()) {  //返回为1成功,0失败
             System.out.println("Test1 调用 getTest2失败!");
             sendResponse("", "错误日志", "0001");
                return;
            }
} catch (Exception e) {
            try {
             sendResponse("", e.getMessage(), "0001");
             e.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } 
 
 }

private void  sendResponse(String out, String receivedMessage, String flag)throws IOException{
        
System.out.println("Test1记录错误日志:"+receivedMessage);
}Test2.java
public int getTest2() {
Test3 t = new Test3();
try{
 t.getTest3();
}catch(Exception e){
System.out.println("getTest2:"+e.getMessage());
e.printStackTrace();
return 0;
}
return 1;
}
Test3.java
public void getTest3() {
if (1 == 1){
throw new RuntimeException("人工报错!");
}
  if (2 == 2) {
      try {
throw new Exception("没有操作员【111 】 的上下文对象.");
} catch (Exception e) {
e.printStackTrace();
}
  }
}

解决方案 »

  1.   

    在Test1主类中,调用Test2.getTest2, 如果报错,将报错信息输出错误信息?应该这样写吧public class Test1 {
    public static void main(String[] args) {
    Test1 t = new Test1();
    t.run();
    } public void run() {
    try {
    Test2 t = new Test2();
    t.getTest2();
    } catch (Exception e) {
    System.out.println("Test1.run error:" + e.getMessage());
    }
    }
    }class Test2 {
    public int getTest2() throws Exception { throw new Exception("调用 Test2.getTest2  错误!"); }
    }
      

  2.   

    你将Test3.java省掉了,这三个类都是我写的伪代码,真正的类里,有很多实现方法,不能将他们省掉。
      

  3.   

    原代码是这样的:
    Handler.java
    try{
    service = new DCIServiceFactory();
                int res = service.getServiceInstance(receivedMessage).service();
                if (res != ConstantHelper.Response.RESPONSE_SUCCESS) {
                 System.out.println("res:"+res);
                    sendResponse(out, receivedMessage, "0001");
                    return;
                }
    }catch (IOException e) {
                try {
                    sendResponse(out, e.getMessage()+"||"+receivedMessage, "0001");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }  catch (Exception e) {
                try {
                    sendResponse(out, e.getMessage()+"||"+receivedMessage, "0001");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }
            finally {
                try {
                    if (socket != null)
                        socket.close();
                } catch (IOException e) {
                    logger.error("关闭socket连接失败.", e);
                    e.printStackTrace();
                }
            }
    BillExpiryPayoutService.java
     public int service() {
            logger.info("start process bill payout wait task.");
            mpo=mp.parse(receivedMessage, null);
            DAOHelper du = new DAOHelper();
            List list = getWFContextVarible(mpo);
            try {
                du.generateWaitTask(ConstantHelper.FlowDefine.FLOW_BILL_EXPIRY_PAYOUT, mpo.getStringValue("OPERID"), list);
            } catch (Exception e) {
                logger.error("生成待办任务失败:" + e.getMessage());
                e.printStackTrace();
                return ConstantHelper.Response.RESPONSE_FAIL;
            }
            int rtn1 = du.addBussinessReg(mpo.getStringValue("KEHUJM"), mpo.getStringValue("JIOYRQ"), mpo.getStringValue("JIOYSJ"),
                    ConstantHelper.TranCode.ACCEPTANCE_BATCH_DICCOUNT, "receive", mpo.getStringValue("SHPJBH"), "承兑批量记账");
            if (rtn1 != ConstantHelper.Response.RESPONSE_SUCCESS)
            {
                logger.error("插入交易登记表时失败" );
                return ConstantHelper.Response.RESPONSE_FAIL;
            }
            logger.info("服务正常结束");
            logger.info("process acceptance account wait task success.");
            return ConstantHelper.Response.RESPONSE_SUCCESS;
        }
      

  4.   

    如果 du.generateWaitTask(ConstantHelper.FlowDefine.FLOW_BILL_EXPIRY_PAYOUT, mpo.getStringValue("OPERID"), list);
    出错。会捕获执行,返回0,失败。
     logger.error("生成待办任务失败:" + e.getMessage());
                e.printStackTrace();
                return ConstantHelper.Response.RESPONSE_FAIL;
    在Handler.java  ,返回失败0后,要写日志,这样错误日志就得不到了。
     int res = service.getServiceInstance(receivedMessage).service();
                if (res != ConstantHelper.Response.RESPONSE_SUCCESS) {
                 System.out.println("res:"+res);
                    sendResponse(out, receivedMessage, "0001");
                    return;
                }
      

  5.   

    logger.error("生成待办任务失败:" + e.getMessage());人家已经给你错误日志输出了,错误日志没必要每层都输出一遍。
    本身这个代码状态只封装了一个int,如果真想拿到错误信息,自己封装一个结果类,然后入库。