Erro: java.lang.IllegalStateException: Attempt to mutate in notification

2 respostas
java
A

Bom dia galera, se houver algum erro me desculpe sou novo aqui. Estou com este erro e nao consegui uma solução. Pesquisei e encontrei algo sobre Runnable mas sem sucesso tambem. O metodo espera dois JDateChooser, e dependendo da seleção da data, o metodo altera a data do outro JDateChooser. Este e o metodo

public static void bloquearDiasEntreDatas(JDateChooser dataInicial,JDateChooser dataFinal){
        dataInicial.getDateEditor().addPropertyChangeListener((java.beans.PropertyChangeEvent ev) -> {
            dataFinal.setMinSelectableDate(dataInicial.getDate());
        });

        dataFinal.getDateEditor().addPropertyChangeListener((java.beans.PropertyChangeEvent ev) -> {
            dataInicial.setMaxSelectableDate(dataFinal.getDate());
        });
    }

se alguém puder me ajudar eu agradeço muito.

2 Respostas

P

eu acho que tem haver com isso aqui:

https://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html

Document listeners should not modify the contents of the document; The change is already complete by the time the listener is notified of the change. Instead, write a custom document that overrides the insertString or remove methods, or both. See Listening for Changes on a Document for details.

A

Bom dia peczenyj, acredito que seja isso mesmo, devido ao listener estar dando este erro. Porem eu tentei solucionar com este medtodo tambem porem nao obtive sucesso. Acredito que estou fazendo algo errado.

public static void bloquearDiasEntreDatas(JDateChooser dataInicial,JDateChooser dataFinal) {

Runnable n = new Runnable(){
        @Override
        public void run() {
            try{
                dataInicial.getDateEditor().addPropertyChangeListener((java.beans.PropertyChangeEvent ev) -> {
                    dataFinal.setMinSelectableDate(dataInicial.getDate());
                });

                dataFinal.getDateEditor().addPropertyChangeListener((java.beans.PropertyChangeEvent ev) -> {
                    dataInicial.setMaxSelectableDate(dataFinal.getDate());
                });
                
            }catch(Exception e){
                e.getStackTrace();
            }
        }  
    };
}
Criado 25 de outubro de 2018
Ultima resposta 25 de out. de 2018
Respostas 2
Participantes 2