Eu sou um programador C e apenas aprendendo alguns java recentemente porque estou desenvolvendo uma aplicação android. Atualmente estou em uma situação. A seguir é o único.
public Class ClassA{ public ClassA(); public void MyMethod(){ try{ //Some code here which can throw exceptions } catch(ExceptionType1 Excp1){ //Here I want to show one alert Dialog box for the exception occured for the user. //but I am not able to show dialog in this context. So I want to propagate it //to the caller of this method. } catch(ExceptionType2 Excp2){ //Here I want to show one alert Dialog box for the exception occured for the user. //but I am not able to show dialog in this context. So I want to propagate it //to the caller of this method. } } }
Agora eu quero usar chamar o método MyMethod () em outro lugar em outra class. Se alguém pode me fornecer algum trecho de código como propagar as exceções para o chamador de MyMethod () para que eu possa exibi-las em uma checkbox de diálogo no método chamador.
Desculpe Se eu não sou muito claro e estranho na maneira de fazer esta pergunta.
Apenas não pegue a exceção em primeiro lugar, e mude sua declaração de método para que ela possa propagá-los:
public void myMethod() throws ExceptionType1, ExceptionType2 { // Some code here which can throw exceptions }
Se você precisar realizar alguma ação e, em seguida , se propagar, poderá recolocá-la novamente:
public void myMethod() throws ExceptionType1, ExceptionType2 { try { // Some code here which can throw exceptions } catch (ExceptionType1 e) { log(e); throw e; } }
Aqui ExceptionType2
não é pego de jeito nenhum – só vai se propagar automaticamente. ExceptionType1
é capturado, registrado e, em seguida, relançado.
Não é uma boa idéia ter blocos catch que apenas relançam uma exceção – a menos que haja algum motivo sutil (por exemplo, para evitar que um bloco catch mais geral o manipule), você deve normalmente remover o bloco catch.
Não pegue e recoloque novamente. Basta fazer isso e pegá-lo no lugar que você quiser
public void myMethod() throws ExceptionType1, ExceptionType2 { // other code }
Exemplo
public void someMethod() { try { myMethod(); } catch (ExceptionType1 ex) { // show your dialog } catch (ExceptionType2 ex) { // show your dialog } }
Basta relançar a exceção
throw Excp1;
Você precisará adicionar o tipo de exceção à declaração MyMthod()
como esta
public void MyMethod() throws ExceptionType1, ExceptionType2 { try{ //Some code here which can throw exceptions } catch(ExceptionType1 Excp1){ throw Excp1; } catch(ExceptionType2 Excp2){ throw Excp2; } }
Ou apenas omita a try
, pois você não está mais manipulando as exceções, a menos que você coloque algum código extra nas instruções catch fazendo coisas com a exceção antes de voltar a executá-lo.
Eu sempre faço assim:
public void MyMethod() throws Exception { //code here if(something is wrong) throw new Exception("Something wrong"); }
então quando você chamar a function
try{ MyMethod(); }catch(Exception e){ System.out.println(e.getMessage()); }