Não existe nenhum meio de interromper uma thread em Java além de abortar o processo inteiro (System.exit).
O mais próximo disso é o método interrupt da classe Thread. Mas ainda assim, esse método é só um “pedido gentil”, digamos assim. Tudo que ele faz é definir o valor de uma flag interna da thread. É responsabilidade do processo que está sendo executado periodicamente checar se lhe pediram para ser interrompido.
Um exemplo disso são os métodos de IO bloqueantes que a JVM oferece. Pode prestar atenção, todos eles declaram poder dar throw numa InterrupedException. Isso significa que, internamente, o método não está bloqueado de verdade. Ele está fazendo uma checagem periódica da flag interna da thread para verificar se deve prosseguir bloqueando ou não.
Existem maneiras de contornar essa “deficiência” (que na verdade é uma feature). Você pode, similar ao que o @rodriguesabner falou, usar timers que vão te avisar quando determinado tempo passar, e assim você pode tomar alguma ação (como esconder a janela, por exemplo).
Em resumo, se você precisa ter o controle para parar seu processo a hora que quiser, você precisa modelar o processo de forma que haja como interrompê-lo, como checar uma flag a cada x unidades de tempo, por exemplo.
Tome cuidado com sleep, porque se você colocar uma thread importante para dormir, o programa inteiro vai ficar estagnado.