O que há de errado com esse loop while? [duplicado]

Esta pergunta já tem uma resposta aqui:

Ponto e vírgula no final da declaração 'if' 17 respostas
boolean r = false ; int s = 0 ;
while (r == false) ; 
{
    s = getInt() ; 
    if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ; 
    else r = true ; 
}

O texto nunca é exibido mesmo quando um 3 ou um 123 é inserido e o loop nunca termina. O que há de errado aqui?