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.