dúvida com a instrução switch

Novamente estou aqui tirando minhas dúvidas com vocês sábios do java

estou querendo usar a instrução case mas ele não faz o loop, se eu digita digitar uma opção inválida ele abre a janela mas tenho que até reinicir meu comp. pois ele não fecha a jenela e volta para a opção.

Agradeço desde ja a ajuda.

package exercicio4;
import java.util.;
import javax.swing.
;

public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    int  op1=0,praia=0, montanha=0, toteleitor;
    String op;
    op=JOptionPane.showInputDialog("Escolha a sua opção\n 1-Praia\n 2-Montanha\n 3-Sair");
           
    op1= Integer.parseInt(op); 
    while (op1!=3)
    {
        switch (op1)
        {
        case 1:
            praia +=1;
            break;
        case 2:
            montanha +=1;
            break;
        default:
           JOptionPane.showMessageDialog(null,"Opção inválida","",JOptionPane.INFORMATION_MESSAGE );
           break; 
        }
     }  
        
       if (op1>0 &&op1 <2)
         toteleitor=1;
        JOptionPane.showMessageDialog(null,"Praia teve: "+praia+" votos e Montanha teve: "+montanha,"votos",JOptionPane.INFORMATION_MESSAGE);           
        
     System.exit(0); 
    
}

}

Amigo, há um erro de lógica no seu algoritmo.

Ele pergunta a opção para o usuário antes de entrar no laço.

Depois entra no laço.
Enquanto a opção (variável op1) for diferente de 3 ele executa o laço.

Porém dentro do loop não há nenhuma possibilidade da variável op1 receber o valor 3, isto porque a pergunta não é refeita.
Sendo assim, ele entra em loop infinito e por isso trava a aplicação.

Para resolver é só colocar a pergunta e a atribuição à variável op1 dentro do laço, assim ela será sempre refeita e o valor de op1 será mudado.

Abraços,

Marcos A. C. Jordão’’