Dúvida sobre Thread.sleep

1 resposta
C

Resumidamente, vou ter algumas JList’s na interface gráfica, dentre elas “Processos Prontos” e “Processos em Execução”. Cada processo tem um tempo de chegada e um tempo total de uso(em segundos).

Quando eu inicio o escalonamento, queria que a minha JList “Processo em Execução” fosse atualizada com o nome do processo que está sendo executado no momento, e após a execução ele fosse passado para a JList “Processo Pronto”. Aqui tem o trecho de código que tentei fazer isso

private class AcoesRadioIniciar implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource()==np)
            {
                janelaIniciar.dispose();
                listaProcesso.run();  
                int aux=0;
                while(aux<listaProcesso.size())
                {
                    modelListaExec.addElement(listaProcesso.posicao(aux).getID());
                    try
                    {
                        Thread.sleep((listaProcesso.posicao(aux).getProcessorTime())*1000);                        
                    }
                    catch(Exception exc)
                    {
                        JOptionPane.showMessageDialog(janelaAdiciona, "Erro", "Erro", 0);
                        exc.printStackTrace();
                    }
                    modelListaExec.removeElementAt(0);
                    modelListaPront.addElement(listaProcesso.posicao(aux).getID());
                    aux++;
                }                
            }

Isso resulta que quando inicio o escalonamento, o programa “congela” pela Thread.sleep() e “retorna” com a JList “Processos prontos” preenchida o nome de todos os processos executados, mas insere todos de uma vez só ao invés de na hora exata em que terminaram.

Então minha dúvida é como eu consigo ir atualizando o DefaultListModel de cada JList na hora exata que os eventos ocorrem, e não no fim do Thread.sleep(). Não sou muito familiarizado com o uso de threads, então não sei se é uma coisa muito óbvia que não consigo solucionar, hehe.

Não sei se me fiz entender bem, mas agradeço a quem puder ajudar

1 Resposta

ViniGodoy

Use uma thread separada. Se você manter o código dentro da Thread do Swing, ela não atualizará a tela até que a execução desse código termine. Para mais informações, leia:
http://download.oracle.com/javase/tutorial/uiswing/concurrency/

Criado 6 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 1
Participantes 2