Senha Errada Não Funciona

Pessoal, eu chamo este método no construtor do Frame; Se a senha estiver errada seria para encerrar a chamada ou fechar a tela, mas ela acaba liberando a abertura do frame, como posso resolver.
protected void senha (){

 int s = 3;
 while (s != 0){
  JPasswordField jpassword = new JPasswordField();
    if (JOptionPane.showConfirmDialog (null, jpassword, "Entre com a senha", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
             String senhadigitada = new String (jpassword.getPassword());

if (!senha.equals(senhadigitada)) {
   s--;

 } else {
   break;
}
    }
    

 }

}

Ola,
s = 3 logo diferente de 0, entra no while, senha errada, s passa a valer 2
s = 2 logo diferente de 0, entra no while, senha errada, s passa a valer 1
s = 1 logo diferente de 0, entra no while, senha errada, s passa a valer 0
s = 0 logo igual a 0, não entra no while. não executa o else.

Problema não é o while, este esta correto. O problema esta que mesmo que o resposta seja errada ele esta permitindo a chama do construtor de classe. Precisa interromper a chamada , mas o dispose não esta solucionando o problema, a unica coisa que funciona é system.exit(0), mas neste caso não quero fechar o sistema.