Turma,
Estou fazendo uma mini-aplicação em que tenho que executar um processo eternamente <while (true)>, processo este que não usa muita cpu, pelo
menos em tese (File.listFiles()).
Tenho uma classe para a interface gráfica que instancia outra classe que contem este método “eterno” a partir de um clique de um botão. Logo
após o instanciamento é chamada este método chamado Monitoramento.
Problema: Se eu usar o <while (true) Obj.Monitoramento();> o processamento fica altíssimo. Na realidade eu pensava que a JVM cuidasse de
manter o processamento num nivel baixo, mas não é o que acontece. Sem esta alternativa eu decidi executar o processo de “tempos em tempos”
que até é mais vantajoso para minha finalidade, bom… é aí que quero a sabedoria de vcs:
Estou usando o <Thread.sleep()>, ou seja, extendi a classe que tem o método Monitoramento de Thread <public class Arquivo extends Thread> e
na classe da interface gráfica estou usando <while (true){ … ObjArq.sleep(1000); ObjArq.Monitoramento(); …}>. Esta solução resolve a
questão do processamento, mas surgiu outro problema:
Na interface gráfica, no clique do botão que executa o <while (true){ … ObjArq.sleep(1000); ObjArq.Monitoramento(); …}>. No clique do
botão a tela simplismente congela e fica inacessível. Fica sempre naquele while (true) e a tela não fica liberada nem para fecha-la.
Preciso de um help para que o Monitoramento seja executado de “tempos em tempos” e que a interface gráfica fique liberada neste tempo.
Segue abaixo o trecho do código das duas classes:
public class Tela extends JFrame implements ActionListener{
…
public void actionPerformed(ActionEvent e){
if (e.getSource()==this.btativar){
ObjArq = new Arquivo();
while (true){
try{
ObjArq.sleep(1000);
ObjArq.Monitoramento();
}…}
…
}
public class Arquivo extends Thread{
…
public void Monitoramento(){…}
…
}
Valeu pela força
Fábio Camelo