ProgressMonitor

Pessoal, estou a tentar usar o progressmonitor, fiz um teste simples ai ele funcionou, agora tentei adptar realmente naquilo que eu precisava, eu estou tentar verificar se ele já atingiu o seu valor maximo com o getMaximum() se assim for então ele chama um outro metodo inserir, o que está a acontencer é que ele primeiro salva o valor é depois manda a mensagem de erro e manda ao mesmo tempo o progressmonitor, eis o codigo:

public void inserir()
	{
		Gravadorpessoa pessoa = new Gravadorpessoa();
		Pessoa modelo = new Pessoa();
		modelo.setNome(txtnome.getText().trim());
		modelo.setIdade(Integer.parseInt(txtidade.getText()));
		modelo.setTelefone(Integer.parseInt(txttelefone.getText()));
		modelo.setLocalidade(txtlocalidadademorada.getText().trim());
		modelo.setBairro(txtbairromorada.getText().trim());
		modelo.setRegistocriminal((String)listaregistocriminal.getSelectedItem());
		//modelo.setBoletimsanidade(txtboletimsanidade.getText().trim());
		//modelo.setEstadocivil(txtestadocivil.getText().trim());
		modelo.setNomepai(txtnomepai.getText().trim());
		//modelo.setOcupacaopai(txtocupacaopai.getText().trim());
		modelo.setNomemae(txtnomemae.getText().trim());
		modelo.setNumerocartaconducao(Integer.parseInt(txtnumerocartac.getText()));
		modelo.setNomepai(txtnomepai.getText().trim());
		modelo.setOcupacaopai(txtocupacaopai.getText().trim());
		modelo.setNomemae(txtnomemae.getText().trim());
		//modelo.setTipocartaconducao(txttipocartac.getText().trim());
		modelo.setLocal(txtlocalnaturalidade.getText().trim());
		modelo.setComuna(txtcomunanaturalidade.getText().trim());
		//modelo.setMunicipio(txtmunicipio.getText().trim());
		//modelo.setProvincia((String) provincia.getSelectedItem());
		try
		{
			boolean valida = pessoa.gravar( modelo );
			if(valida)
				JOptionPane.showMessageDialog(null, "Candidato cadastrado com sucesso","Cadastro", JOptionPane.INFORMATION_MESSAGE);
			else
				JOptionPane.showMessageDialog(null, "Já existe um candidato com o mesmo codigo","Cadastro", JOptionPane.ERROR_MESSAGE);
		}
		catch( IOException e )
		{
				JOptionPane.showMessageDialog(this, "Erro ao cadastrar o candidato","Cadastro", JOptionPane.ERROR_MESSAGE);
		}
	}
public void actionPerformed(ActionEvent evento)
	{
		if(evento.getSource() == salvar)
		{
			Component parent = (Component) evento.getSource();
			monitor = new ProgressMonitor(parent, "A salvar dados do candidato", "", 0, 200);
			cont = 0;
			if (monitor != null) 
			{
				if (timer == null) 
				{
					timer = new Timer(250, new ActionListener() 
					{
						public void actionPerformed(ActionEvent e) 
						{
							if (monitor == null)
								return;
							if (monitor.isCanceled()) 
							{
								JOptionPane.showMessageDialog(null, "Processo cancelado","Candidato", JOptionPane.INFORMATION_MESSAGE);
								timer.stop();
							} 
							//if(monitor.getMaximum() >= 200)
								//inserir();
							else 
							{
		
								cont += 3;
								monitor.setProgress(cont);
								if(monitor.getMaximum() >= 200)
									inserir();
								
							}
						}
					});
				}
			timer.start();
			}
			//inserir();
			//visualizartodos();
		}
	}