Método chamando outro

Abaixo eu tenho um código, onde a cada passo eu tenho um método que será executado, entretanto quando chega no final (no método telaEscolha())e a opção é “YES_OPTION” ele chama rapidamente o método telaDeInicio() e volta pra este mesmo método com a pergunta “Deseja continuar?”.
Gostaria de saber porque ao chamar o método telaDeInicio() ele não executa o fluxo novamente como desejado. Por favor.
Quero uma explicação que me faça entender, agradeço desde já, sou iniciante.
Segue abaixo o código:

> package com.view;

> import javax.swing.JOptionPane;

> import com.model.EDadoInvalido;
> import com.model.ItemVenda;
> import com.model.Recebivel;
> import com.model.Servico;

> public class RegistraRecebimentos3 {
> 	public static Recebivel[] registros = new Recebivel[100];
> 	String jOptionMsg = "";
> 	String jOptionQuantidade = "";
> 	String jOptionPreco = "";
> 	int option;
> 	int confirmOption;
> 	
> 	public static void registraRecebimento(Recebivel recebivel) {
> 		for (int i = 0; i < registros.length; i++) {
> 			if (registros[i] == null) {
> 				registros[i] = recebivel;
> 				break;
> 			}
> 		}
> 	}

> 	public static Recebivel[] getListaRecebimento() {
> 		return registros;
> 	}
> 	
> 	public void telaDeInicio() {
> 		String[] array = null;
> 		
> 		option = JOptionPane.showOptionDialog(null, "Venda ou Serviço?", "Escolha uma opção: ",
> 				JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
> 				array = new String[] { "Venda", "Serviço" }, "array[0]");
> 		
> 		telaDesc();
> 	}
> 	
> 	public void telaDesc() {
> 		jOptionMsg = ((option == 0
> 				? EDadoInvalido.validaCampoVazio(jOptionMsg, "Digite o nome do produto: ",
> 						"O produto precisa ser informado!")
> 				: EDadoInvalido.validaCampoVazio(jOptionMsg, "Digite o nome do serviço: ",
> 						"O serviço " + "precisa ser informado")));
> 		telaQuant();
> 	}
> 	
> 	public void telaQuant() {
> 		jOptionQuantidade = ((option == 0
> 				? EDadoInvalido.validaCampoVazio(jOptionQuantidade, "Digite a quantidade do produto: ",
> 						"A quantidade precisa ser informada!")
> 				: EDadoInvalido.validaCampoVazio(jOptionQuantidade, "Digite a quantidade de horas: ",
> 						"Horas precisam ser informadas!")));
> 		telaPreco();
> 	}
> 	
> 	public void telaPreco() {
> 		jOptionPreco = ((option == 0
> 				? EDadoInvalido.validaCampoVazio(jOptionPreco, "Digite o preço unitário: ",
> 						"O preço unitário precisa ser informado!")
> 				: EDadoInvalido.validaCampoVazio(jOptionPreco, "Digite o preço hora: ",
> 						"Preço hora precisa ser informado!")));
> 		adicionaArray();
> 	}
> 	
> 	public void adicionaArray() {
> 		if (option == 0)
> 			registraRecebimento(new ItemVenda(jOptionMsg, Integer.parseInt(jOptionQuantidade), Double.parseDouble(jOptionPreco)));
> 			else
> 				registraRecebimento(new Servico(jOptionMsg, Integer.parseInt(jOptionQuantidade), Double.parseDouble(jOptionPreco)));
> 		telaEscolha();
> 	}
> 	
> 	public void telaEscolha() {
> 		confirmOption = JOptionPane.showConfirmDialog(null, "Deseja continuar?");

> 		if (confirmOption == JOptionPane.NO_OPTION)
> 			JOptionPane.showMessageDialog(null, getListaRecebimento());
> 		else
> 			 telaDeInicio();			
> 	}
> 	
> 	
> 	public static void main(String[] args) {
> 		new RegistraRecebimentos3().telaDeInicio();
> 	}
> }