Thread e Exception, capiturar exception e fazer um throws

7 respostas
gustavo.moda

Amigos,

Tenho um metodo estatico que executa varios comandos e esses comandos vao gerar alguns throws.
Ex.
A aplicacao vai chamar o metodo VendaManager.efetuarSuprimento.

Abaixo o metodo

public static void efetuarSuprimento(final Usuario usuario, final ValorMonetarioBigDecimal valorSuprimento)
throws VendaManagerException, ImpressoraException, SincronizarException {
     VendaManager.criarMovimentoVenda(VendaManager.tipoSuprimento);
     PdvManager.impressoraManager.suprimento(valorSuprimento);
     Integer numeroCupom = PdvManager.impressoraManager.getNumeroCupom();
     VendaManager.movimentoCaixa.setNumeroCupom(numeroCupom);
     VendaManager.movimentoCaixa.setValorTotal(valorSuprimento);
     VendaManager.salvarMovimentoVenda();
     VendaManager.zerarMovimento();
     VendaManager.enviarMovimentos();		
}

Então, quero empacotar todos os comandos dos metodos em uma Thread, processar ela e caso ocorra alguma exception faca o trhow do metodo.
Estou viajando ou isso é possivel?

7 Respostas

dyorgio

Cara, já que vc vai fazer a Thread
podes fazer algo do tipo :

new Thread("Nome"){
 public void run(){
  try{
    // seu código que gera erros
  }catch(Exception e){
    //tratamento de erros
  }
 }
}

ou então para um tratamento mais avançado de erros usa ThreadGroup e sobreescreva o método
uncatchException(), senão for esse nome é parecido

Abs,

gustavo.moda

dyorgio:
Cara, já que vc vai fazer a Thread
podes fazer algo do tipo :

new Thread("Nome"){
 public void run(){
  try{
    // seu código que gera erros
  }catch(Exception e){
    //tratamento de erros
  }
 }
}

ou então para um tratamento mais avançado de erros usa ThreadGroup e sobreescreva o método
uncatchException(), senão for esse nome é parecido

Então, to apanhando nisso. (pra variar).

Olha a pilha.

  1. Interface chama o metodo e tem um try catch para aguardar a bagaca. (dependendo de cada erro toma uma acao), isso ja rola bem.

Agora estou mudando o metodo para iniciar a thread e processar os comandos, caso ocorra uma expetption, eu tenho que enviar ela para a interface fazer o tratamento adequado. e isso?

Então a interface vai ter um metodo que vai tomar a acao para cada excpetion que ocorre?

é isso?
Se for, to perdido… Pois a mesma excpetion pode ficar em varios comandos, ex. sangria, suprimento, abrir cupom, etc…

dyorgio

Háaaaaaa, to ligado oque tu quer fazer…
mostrar a janelinha pro usuario enquanto faz
a comunicação em background né?

simples cara assim ó :

JDialog progresso = new JDialog();
Exception[] erro = new Exception[1];
new Thread("Nome"){   
public void run(){   
  try{   
    // seu código que gera erros   
  }catch(Exception e){   
   erro[0] = e;
  }   
}.start(); 
progresso.setVisible(true);
if (erro[0] != null){
 throw erro[0];
}
}

essa é baba vai dizer ? :stuck_out_tongue:

Abs,

gustavo.moda

Opa. valeu por responder…

Não rolou nao…

Vou explicar.

No frame

public void comandoSuprimento(String resposta) {

		ValorMonetarioBigDecimal valor = new ValorMonetarioBigDecimal(0, 2);
		resposta = (String) JOptionPane.showInputDialog(this.frame,
				"Informe o valor", "Suprimento", JOptionPane.YES_NO_OPTION,
				new ImageIcon(), null, resposta);
		try {
			if (resposta == null) {
				return;
			}			
			valor = new ValorMonetarioBigDecimal(NumberFormat.getInstance()
					.parse(resposta).floatValue(), 2);
			[b][i]VendaManager.efetuarSuprimento(UsuarioManager.operador, valor);[/i][/b]
		} catch (java.text.ParseException e) {
			informarErro("Numero inválido!");
			comandoSuprimento(resposta);
		} catch (ImpressoraException e) {
			informarErro(e.getMessage());
		} catch (SincronizarException e) {
			informarErro(e.getMessage());
		} catch (ImpressoraManagerExpection e) {
			informarErro(e.getMessage());
		} catch (VendaManagerException e) {
			informarErro(e.getMessage());
		} catch (UsuarioNaoAutorizadoEfetuarSuprimentoException e) {

			LoginPermissaoDialog loginPermissaoDialog = new LoginPermissaoDialog(
					this.frame, "Suprimento R$ "
					+ valor.getValorFormatado(),
					LoginPermissaoDialog.SUPRIMENTO);
			loginPermissaoDialog.login();
			Usuario usuario = loginPermissaoDialog.getUsuario();
			if (usuario == null) {
				informarErro(e.getMessage());
			} else {
				VendaManager.efetuarSuprimento(usuario, valor);
			}

		} catch (Exception e) {
			informarErro(e.getMessage());
		} catch (Throwable e) {
			informarErro(e.getMessage());
		}
	}

No metodo…
VendaManager.efetuarSuprimento(UsuarioManager.operador, valor);

public static void efetuarSuprimento(final Usuario usuario, final ValorMonetarioBigDecimal valorSuprimento)  
    throws VendaManagerException, ImpressoraException, SincronizarException, UsuarioNaoAutorizadoEfetuarSuprimentoException, Exception, Throwable {  
         VendaManager.criarMovimentoVenda(VendaManager.tipoSuprimento);  
         PdvManager.impressoraManager.suprimento(valorSuprimento);  
         Integer numeroCupom = PdvManager.impressoraManager.getNumeroCupom();  
         VendaManager.movimentoCaixa.setNumeroCupom(numeroCupom);  
         VendaManager.movimentoCaixa.setValorTotal(valorSuprimento);  
         VendaManager.salvarMovimentoVenda();  
         VendaManager.zerarMovimento();  
        VendaManager.enviarMovimentos();         
   }

Rodar a tread no metodo VendaManager.efetuarSuprimento executando os comandos e retornando a exception quando ocorer o erro.

saca?

dyorgio

Cara, vc quer uma thread para processar em background e seguir o fluxo?
acho que não né?
vc vai ficar esperando pra saber se ocorreu tudo bem
e avisar o usuario caso o suprimento deu erro por algum motivo certo?
então a melhor maneira de fazer isso é com um Dialogo Indicando que
o programa esta processando o suprimento,
senti falta disso nos seus métodos,
pois se vc não for fazer esse dialogo pro usuario,
doque adianta ter outra Thread rodando?

Abs,

gustavo.moda

Exatamente isso! Mas em vez de Jdialog, tem uma area do frame que rola a informação que o sistema está fazendo.
Entende!?
Por isso queria despresar o jdialog… mas acho que nao vai rolar nao :smiley:
Vou tentar com JDialog, se funcionar beleza!!!
Valeu pela ajuda.

Esse site é muito bom! Essa mensagem já está indexada no santo google!!! :wink:

dyorgio

aaaaaaaaaaa, vc poderia colocar o erro nessa mesma area da janela,
porem o cara poderia já estar fazendo outra coisa,
melhor mesmo é parar com um dialogo e esperar tudo acabar
impressora fiscal é um saco
Qualquer novidade avisa ae
Abs,

Criado 10 de julho de 2008
Ultima resposta 11 de jul. de 2008
Respostas 7
Participantes 2