2012-12-12 83 views
-1

我需要知道如何在下面的情况下处理异常。请帮助我,在java中正确的错误处理

public interface DCommand { 

    public Object execute(Class_A car); 
} 

public class Class_B { 

    public void getMessage() throws Exception {  
      throw new Exception("Test error"); 
    } 
} 

public class Class_A { 

    Class_B cb = null; 

    public Class_B getClass_b() { 
     cb = new Class_B(); 
     return cb; 
    } 

    public Object testAction(DCommand command) { 
     Object returnObject = null; 
     try { 
      return (Boolean) command.execute(this); 
     } catch (Exception e) { 
      System.out.println("ERROR IN CLASS B" + e.getLocalizedMessage()); 
     } 

     return returnObject; 
    } 
} 


====================== simiulating ============================ 

public class Test { 

    public static void main(String[] args) { 
     Class_A c = new Class_A(); 

     boolean a = (Boolean) c.testAction(new DCommand() { 

      @Override 
      public Object execute(Class_A car) { 
       try { 
        car.getClass_b().getMessage(); 
        return true; 
       } catch (Exception ex) { 
        System.out.println("Error in the simulator."); 
       } 
       return false; 
      } 
     }); 


    } 
} 

当我运行上面的代码,我需要赶上由Class_B在Class_A抛出异常的地方打印“ERROR在课堂上”。

回答

0

问题是您在B类的getMessage方法中抛出一种Exception类型。相反,您应该通过扩展java.lang.Exception来定义自己的例外。

public class ClassBException extends Exception { 
    public ClassBException(String msg) { 
     super(msg); 
    } 
} 

然后用ClassBException在B类的getMessage方法抛出这样

public class Class_B { 
    public void getMessage() throws ClassBException {  
      throw new Exception("Test error"); 
    } 
} 

现在你需要一个有独立的catch块用于ClassBException在任何地方你调用B类的getMessage方法。

0

加入这个了Methode A类:

public void runGetMessage() 
{ 
    try{ 
    cb.getMessage(); 
    }catch(Exception e){ 
     System.out.println("Error in CLASS A."); 
    } 
} 

而且执行梅索德更改为:

public Object execute(Class_A car) { 
    try { 
      car.getClass_b(); 
      car.runGetMessage(); 
      return true; 
    } catch (Exception ex) { 
      System.out.println("Error in the simulator."); 
    } 
    return false; 

    }