Tempo de Execução de uma atividade

Olá, boa noite a todos.

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.

Até mais.

Entendi.

Você pode fazer assim, exemplo:

// Suponhamos que o texto desse JLabel é "Primeiro Texto"
try {
   Thread.sleep(5000); //pausa de 5 segundos
   jLabel1.setText("Segundo texto");
} catch (InterruptedException ex) {
   ex.printStackTrace();
}

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.

2 curtidas

Só complementando o que os outros amigos ja disseram, caso não saiba o que estudar, você pode dar uma olhada em Threads e depois em TimerTask.

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. :grinning:

Mais chato que rapaz! After effects é a melhor parte hahahaha

é porque a parte gráfica vai ser feita nele e, aquilo pra mim, são águas nunca exploradas…mas vamos ver.

ah, se quiserem, me falem depois que eu coloco o código aqui.

Puts, mas é de boa até. Não tem muito segredo não, só uma dica, quando exportar um vídeo, passa pro premiere pra deixar ele mais leve.

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.

1 curtida