Pessoal, preciso que dentro da função run() do meu Timer haja uma pausa de tempo em segundos, que um método que já criei informará ao programa quando precisar. Porém não sei que comando utilizar para fazer essa pausa.
Tentei o Thread.sleep(tempo); mas o programa trava todinho por aquele tempo e não é isso que eu quero.
O programa simula uma fila de impressão de 4 micros, o sistema joga os documentos na fila e automaticamente o timer comanda a remoção dos documentos. Porém, os documentos devem sair com tempo proporcional ao seu tamanho. E o tamanho é gerado aleatoriamente no ato da inserção do documento na fila.
Tudo está pronto, mas não consigo fazer esse tempo proporcional.
O Timer já tem um tempo de delay especificado por mim (5000ms), mas tentei inserir no lugar do delay a chamada do método que retorna o tamanho do arquivo (que pode ser usado como tempo em ms). Entretanto, o Timer pega o tempo de delay do primeiro elemento da fila e usa esse mesmo delay para todos os demais. Quando na verdade deveria ter um delay diferente para cada elemento, de acordo com o tamanho do arquivo na fila, que é uma variável do tipo int.
Eu acho que desse jeito você tá dando um sleep na "impressora e nçao nos documentos.
Tenta fazer um construtor na Thread Timer pra ela receber o tempo e ela ficar encarregada de parar durante aquele tempo…
Ou seja coloque o sleep dentro da Classe Timer.
Eu fiz isso, mas o sleep quer onde ele esteja faz o programa todinho travar durante aqueles segundos. O usuário não pode apertar nenhum botão, não pode fazer mais nada, o programa “dorme” por alguns segundos.
Não existe algo que não trave desse jeito?
Se for isso mesmo está dando um erro e não está funcionando o timer:
[color=red]Exception in thread “Timer-0” java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at filadeimpressao.Fila.run(Fila.java:119)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)[/color]
com o sleep deveria funcionar provávelmente existe erros na lógica do teu programa, posta ele completo (se não for muito grande) ou debuga com uma ide tipo eclipse ou netbeans.
Ai vai um exemplo de um run com sllep que eu fiz a tempo atrás:
public void run(){
Pessoa aux;
while (true){
try { Parque.SemaforoDoBrinquedo[tipoDeBrinquedo].acquire();} catch(Exception e){}
if (Parque.filasDosBrinquedos[tipoDeBrinquedo].size() >= capacidadeDePessoas){
for (int i=0; i<capacidadeDePessoas; i++){
pessoasNoMeuBrinquedo.add(Parque.filasDosBrinquedos[tipoDeBrinquedo].get(0));
Parque.filasDosBrinquedos[tipoDeBrinquedo].remove(0);
}
Parque.arrumaAFilaNoMenu(Parque.filasDosBrinquedos[tipoDeBrinquedo], 2, tipoDeBrinquedo);
Parque.SemaforoDoBrinquedo[tipoDeBrinquedo].release();
Parque.arrumaAFilaNoMenu(pessoasNoMeuBrinquedo, 3, tipoDeBrinquedo);
switch (tipoDeBrinquedo){
case 0: InterfaceComUsuario.jLabel13.setText("BRINQUEDO CHEIO"); break;
case 1: InterfaceComUsuario.jLabel28.setText("BRINQUEDO CHEIO"); break;
case 2: InterfaceComUsuario.jLabel27.setText("BRINQUEDO CHEIO"); break;
case 3: InterfaceComUsuario.jLabel26.setText("BRINQUEDO CHEIO"); break;
}
try { sleep(5000);} catch(Exception e){}
pessoasNoMeuBrinquedo.clear();
Parque.arrumaAFilaNoMenu(pessoasNoMeuBrinquedo, 3, tipoDeBrinquedo);
switch (tipoDeBrinquedo){
case 0: InterfaceComUsuario.jLabel13.setText("PARADO"); break;
case 1: InterfaceComUsuario.jLabel28.setText("PARADO"); break;
case 2: InterfaceComUsuario.jLabel27.setText("PARADO"); break;
case 3: InterfaceComUsuario.jLabel26.setText("PARADO"); break;
}
tempoDeEsperaDaFila = System.currentTimeMillis();
}
else if((System.currentTimeMillis() - tempoDeEsperaDaFila) >= 10000 && !Parque.filasDosBrinquedos[tipoDeBrinquedo].isEmpty()){
pessoasNoMeuBrinquedo.addAll(Parque.filasDosBrinquedos[tipoDeBrinquedo]);
Parque.filasDosBrinquedos[tipoDeBrinquedo].clear();
Parque.arrumaAFilaNoMenu(Parque.filasDosBrinquedos[tipoDeBrinquedo], 2, tipoDeBrinquedo);
Parque.SemaforoDoBrinquedo[tipoDeBrinquedo].release();
Parque.arrumaAFilaNoMenu(pessoasNoMeuBrinquedo, 3, tipoDeBrinquedo);
switch (tipoDeBrinquedo){
case 0: InterfaceComUsuario.jLabel13.setText("FUNCIONANDO POR TEMPO"); break;
case 1: InterfaceComUsuario.jLabel28.setText("FUNCIONANDO POR TEMPO"); break;
case 2: InterfaceComUsuario.jLabel27.setText("FUNCIONANDO POR TEMPO"); break;
case 3: InterfaceComUsuario.jLabel26.setText("FUNCIONANDO POR TEMPO"); break;
}
try { sleep(5000);} catch(Exception e){}
pessoasNoMeuBrinquedo.clear();
Parque.arrumaAFilaNoMenu(pessoasNoMeuBrinquedo, 3, tipoDeBrinquedo);
switch (tipoDeBrinquedo){
case 0: InterfaceComUsuario.jLabel13.setText("PARADO"); break;
case 1: InterfaceComUsuario.jLabel28.setText("PARADO"); break;
case 2: InterfaceComUsuario.jLabel27.setText("PARADO"); break;
case 3: InterfaceComUsuario.jLabel26.setText("PARADO"); break;
}
tempoDeEsperaDaFila = System.currentTimeMillis();
}
else Parque.SemaforoDoBrinquedo[tipoDeBrinquedo].release();
try { sleep(Parque.SleepDosBrinquedos[tipoDeBrinquedo]);} catch(Exception e){}
}
}