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