-1

I need to know how to handle the exceptions in a situation like below. Please assist me,

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;
            }
        });


    }
}

When I run the above code I need to catch the exception thrown by the Class_B in the Class_A where prints the "ERROR IN CLASS A".

4

2 に答える 2

0

問題は、クラス B の getMessage メソッドでタイプの例外をスローしていることです。代わりに、拡張して独自の例外を定義する必要があります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");
    }
}

ここで、クラス B の getMessage メソッドを呼び出している任意の場所で、ClassBException の個別の catch ブロックが必要です。

于 2012-12-12T12:05:17.773 に答える
0

この Methode をクラス A に追加します。

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

Execute メソッドを次のように変更します。

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;

   }
于 2012-12-12T12:07:38.847 に答える