Existe uma forma de eu fazer um processo ser executado e depois ele parar totalmente através de um método de tempo ?
Exemplo:
eu aperto um botão…ele vai executar um processo dentro de 5 segundos, acabou esses segundos, ele da parada total e começa a executar outra coisa (independente de ser ou não um processo igual).
tipo assim:
vou clicar num botão e ele vai executar um gif (ou um outro processo qualquer) durante 3 segundos. Assim que os 3 segundos acabarem, a execução do gif para, e depois disso, é iniciado um outro processo qualquer.
espero que vocês tenham entendido e que isso tenha solução.
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.
Foi quaaaase o que eu fiz, mas deu certo
Determinei o tempo em que um processo teria pra executar e deu certo. Assim que o tempo acaba, ele pula pra outra tarefa (ou seja lá o que tiver a seguir), e funcionou.
eu usei o java.util Timer nisso.
Fiz o teste com um gif de 6 segundos, eu determinei que em 3 segundos ele pararia e pularia pra outro processo e em 3 segundos, o gif não tinha terminado, e foi pra outra tarefa. Deu muito certo.
Valeu ai, muito obrigado. Agora é pular pro mais chato, o after effect. valeu.
Porque, a ideia desse código de interrupção, é fazer rodar essa animação do after no java (como se fosse um gif ou algo do tipo) e assim que o vídeo acabar, ele pare e faça outra coisa após. Pra não ficar em loop infinito.