Controle de Threads [RESOLVIDO]

0 respostas
mamangava

Bom dia galera.

É o seguinte, estou trabalhando em um projeto no qual uso threads.
E eu preciso fazer um controle e não estou conseguindo. O problema é o seguinte:

O projeto é um gerenciador de filas (por exemplo para Bancos), e em cada “caixa” os funcionários irão ter um teclado,
que quando acionado solicita um novo atendimento. Imaginem um estabelecimento que tenha varios desses teclados.

Quando um novo atendimento é solicitado, eu recebo um objeto do tipo atendimento que contém algumas informações (senha do atendimento,
numero da mesa em que esse atendimento será feito, etc) e essa informações são mostradas em um painel.

Ai que está o problema, se 2 ou mais funcionarios solicitarem o atendimento “juntos”, a informação do primeiro atendimento solicitado é sobrescrita
no painel. E não estou conseguindo fazer o controle disso.

Segue abaixo o código da classe que mostra as informações no painel.

class novaSenha implements Runnable {

    JTextPane tpSenha;
    JTextPane tpMesa;
    Socket socket;
    Atendimento atendimento;

    public novaSenha(JTextPane tpSen, JTextPane tpMe, Socket sock) {
        this.tpSenha = tpSen;
        this.tpMesa = tpMe;
        this.socket = sock;
    }

    public void run() {

        try {
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            atendimento = (Atendimento) ois.readObject();
            addAtendimento(atendimento);

            ois.close();
            socket.close();
        } catch (IOException e) {
            System.out.println(e);
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        }
    }

    public synchronized void addAtendimento(Atendimento a) {
        if (a != null) {
            exibirAtendimento(true);
        } else {
            exibirAtendimento(false);
        }
    }

    // Eu estava tentando fazer o controle nesse método. Mais não consegui.
    // Eu tenho que mostrar a senha no painel por no mínimo 3 s e só então mudar a senha.
    public void exibirAtendimento(boolean tipo) {
        synchronized (this) {
            try {
                this.wait(3000);
            } catch (InterruptedException ex) {
                Logger.getLogger(novaSenha.class.getName()).log(Level.SEVERE, null, ex);
            }
            if (tipo) {
                tpSenha.setText(atendimento.getSenha());
                tpMesa.setText(atendimento.getMesa().getNumMesa());
                new AePlayWave("D:\\Workspace\\wave\\dingdong.wav").start();
            } else {
                tpSenha.setText(null);
                tpMesa.setText(null);
            }

        }

    }
}

Então é isso galera, estou precisando muito disso.
Espero que me ajudem.

Atenciosamente,

Rafael Souza.

Criado 6 de junho de 2011
Respostas 0
Participantes 1