Tratamento de Exceção não é reconhecido

Pessoal, estou tentando fazer uma calculadora com interface gráfica bem simples, só com as 4 principais operações mesmo. E queria colocar um tratamento de exceção caso tente realizar uma divisão por zero.

Vou colocar alguns trechos das minhas classes, para não ficar muito grande.

Classe Calculadora

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculadora extends JanelaGrafica {
private float op1, op2, result;
private int cont;
private char operador;
private Calculadora Atual; // Só para mandar o objeto atual para o tratamento de exceção

public Calculadora()throws DivPorZero{
	//Construtor da classe JanelaGrafica, para criar a janela da calculadora.
	super();
	/* Contador para saber se já foi digitado um operador, para que seja possível
	 * saber a ordem dos operadores (das variáveis).
	 */
	cont = 0;
	Atual = this;
	operandos[0].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			
			//Se for o primeiro operador da conta
			if(cont==0){
				op1 = Float.parseFloat(topo.getText());
				topo.setText(null); //Apagar o TextField da calculadora, para receber o novo operando.
				cont++; //Indicar que já foi digitado um operador.
				operador = '/';
			}			
		}
	});
	
	operandos[1].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(cont==0){
				op1 = Float.parseFloat(topo.getText());
				topo.setText(null);
				cont++;
				operador = '*';
			}
		}
	});
	
	operandos[2].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(cont==0){
				op1 = Float.parseFloat(topo.getText());
				topo.setText(null);
				cont++;
				operador = '+';
			}
		}
	});
	
	operandos[3].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(cont==0){
				op1 = Float.parseFloat(topo.getText());
				topo.setText(null);
				cont++;
				operador = '-';
			}
		}
	});
	
	operandos[5].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			cont = 0;
			topo.setText(null);
		}
	});
	
	operandos[4].addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			switch(operador){
			case '/':
				
				if(cont==1){
					op2 = Float.parseFloat(topo.getText());
					topo.setText(null);
					String aux;
					result = op1 / op2;
					aux = Float.toString(result);
					topo.setText(aux);
					cont--;
				}
				else{
					throw new DivPorZero(Atual);
					//topo.setText(null);		
				}.......[/code]

Classe DivPorZero

public class DivPorZero extends Exception{ public DivPorZero(Calculadora calc){ calc.topo.setText("Erro. Não existe divisão por 0."); } }

O erro que aparece é o seguinte:
[color=red]Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Unhandled exception type DivPorZero

at AplicacaoGrafia.main(AplicacaoGrafia.java:6)

[/color]

A calculadora está realizando as operações normalmente, só que na hora que mando fazer uma div por 0, só aparece a palavra “Infinity” no TextField, e eu queria mudar isso com o tratamento de exceções.

Muito Obrigado.

oops vide tópico abaixo!

antes de mais nada, uma exceção serve só para ser exceção, nada de atribuir valores a campos a partir de uma exceção.
Segundo, crie um contrutor default (construtor que não recebe nada) e outro que recebe uma string (para você mostrar mensagens para o usuário) e tente de novo!

Mas se eu não recebo a calculadora como parâmetro, como eu vou alterar o TextField dela, na Exceção?

divisões por zero já lançam java.lang.ArithmeticException , se quiser pode trabalhar com elas ou até lançar a sua exceção ao capturar uma ArithmeticException

[quote=Thiago veiga]divisões por zero já lançam java.lang.ArithmeticException , se quiser pode trabalhar com elas ou até lançar a sua exceção ao capturar uma ArithmeticException
[/quote]

Mas como eu chamo ela ?

Desculpe as tantas perguntas, é que ainda estou aprendendo java.

Valew

try {
  // seu codigo 
}catch(ArithmeticException)
{
 // tratamento de erro 
}

se quiser chamar a sua exceção onde esta o tratamento de erro coloque throw new DivPorZero( seu objeto );

[code]case ‘/’:
try{
if(cont==1){
op2 = Float.parseFloat(topo.getText());
topo.setText(null);
String aux;
result = op1 / op2;
aux = Float.toString(result);
topo.setText(aux);
cont–;
}
}
catch(throw new DivPorZero(Atual)){
DivPorZero(e1);
}

				break;[/code]

Eu coloquei assim, mas ta dando erro. Eu até consegui imprimir na calculadora a minha mensagem mas foi utilizando uma sugestão do próprio Eclipse, mas achei que ficou estranho… olha só:

[code]case ‘/’:
try{
if(cont==1){
op2 = Float.parseFloat(topo.getText());
topo.setText(null);
String aux;
result = op1 / op2;
aux = Float.toString(result);
topo.setText(aux);
cont–;
}
}
finally{
try {
throw new DivPorZero(Atual);
} catch (DivPorZero e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//topo.setText(null);
}

				break;[/code]

Ele imprime mas da um monte de erro no Eclipse.

nao sei se é bem o que vc quer , mas fiz um pequeno exemplo

classe de teste

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class TestError extends JFrame{
	
	public TestError() {
	 super("my window");	
	}

	public static void main(String[] args) {
		TestError testError = new TestError();
		JPanel painel = new  JPanel();
		JTextField text = new JTextField();
		painel.add(text);
		testError.add(painel);
		testError.setBounds(200, 200, 200, 200);
		testError.setVisible(true);
		
		try{
			throw new MyException("mensagem de erro");
		}catch(MyException me){
			text.setText(me.getMessage());
			
		}
	}
}

minha classe de erro


public class MyException extends Exception{

	public MyException() {
		this("meu erro");
	}
	
	public MyException(String erro){
		super(erro);
	}
}

como foi dito acima , faça um construtor default e um que recebe uma string na classe de erro e esta classe de exceção serve só para ser exceção, nada de atribuir valores a campos a partir de uma exceção.

Eu fiz assim e está dando certo… agora não sei se é correto fazer isso:

case '/': if(cont==1){ try{ op2 = Float.parseFloat(topo.getText()); topo.setText(null); String aux; result = op1 / op2; aux = Float.toString(result); topo.setText(aux); cont--; if(op2 == 0) throw new DivPorZero(Atual); }catch (DivPorZero e1){} }

Valew pelas dicas pessoal, agora vou tentar colocar um tratamento de evento para teclado. :smiley: