Pessoal tô com um problema no seguinte código:
txtDescAbsoluto.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
atualizaPreco();
}
public void removeUpdate(DocumentEvent e) {
atualizaPreco();
}
public void changedUpdate(DocumentEvent e) {}
public void atualizaPreco(){
cupom.setDescAcres(txtDescAbsoluto.getNumero());
double desc = txtDescAbsoluto.getNumero() * 100/ cupom.getSubTotal();
txtDescRelativo.setNumero(desc);
}
});
txtDescRelativo.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
atualizaPreco();
}
public void removeUpdate(DocumentEvent e) {
atualizaPreco();
}
public void changedUpdate(DocumentEvent e) {
}
public void atualizaPreco(){
double desc = txtDescRelativo.getNumero()*cupom.getSubTotal()/100;
cupom.setDescAcres(desc);
txtDescAbsoluto.setNumero(desc);
}
});
O que tô tentando fazer é atualizar um campo com porcentagem quando o usuário muda um valor e atualizar o valor quando ele muda a porcentagem. Mas parece que o Java cria um lock quando tem algum listener em execução....
Obetenho o seguinte erro:Exception occurred during event dispatching:
java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
at javax.swing.text.AbstractDocument.remove(AbstractDocument.java:570)
at zcm.swing.ZDecimalField$DecimalDocument.insertStringConfigurada(ZDecimalField.java:139)
at zcm.swing.ZDecimalField.setNumero(ZDecimalField.java:97)
at emissor.TelaFechaVenda$5.atualizaPreco(TelaFechaVenda.java:183)
at emissor.TelaFechaVenda$5.removeUpdate(TelaFechaVenda.java:173)
at javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:243)
at javax.swing.text.AbstractDocument.handleRemove(AbstractDocument.java:608)
at javax.swing.text.AbstractDocument.remove(AbstractDocument.java:576)
at zcm.swing.ZDecimalField$DecimalDocument.insertStringConfigurada(ZDecimalField.java:139)
at zcm.swing.ZDecimalField.setNumero(ZDecimalField.java:97)
at emissor.TelaFechaVenda$4.atualizaPreco(TelaFechaVenda.java:162)
at emissor.TelaFechaVenda$4.removeUpdate(TelaFechaVenda.java:156)
at javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:243)
(...)
Qual a melhor forma de contornar esse erro?
Alguem tem alguma idéia que possa me ajudar?
Já usei um código com invokeLater, é uma boa opção?