Thread X Interface gráfica, SOCORRO!

Alguém saberia como resolver o problema desse código, o problema está descrito nele:


public void sugerir(){
        if (jtp==null) return;
        StyledDocument doc = jtp.getStyledDocument();
        Style style = doc.addStyle("StyleName", null);
        Scanner sc = new Scanner(jtp.getText());
        int indice = 0;       
        FormCorretor form = new FormCorretor();
        form.setVisible(true);        
            
        while(sc.hasNext()){//inicia a procura palavra por palavra com a classe scanner, delimitador " " por default.
                liberar = false;
                String s = sc.next().replaceAll("[,\\.!\\?)(º/:]","");//apenas para correta interpretação, retira esses caracteres da palavra sendo julgada para evitar erro de análise
                boolean procura = corretor.conferePalavra(s);//verifica se a palavra existe no dicionário, se sim retorna true       
                if (s.matches("\\w*[\\d+]\\w*]")) procura=true;//caguei, se tiver número misturado com letras não considere como palavra errada
                indice = jtp.getText().indexOf(s,indice);//pega o índice da palavra no jtextpane
                
                StyleConstants.setStrikeThrough(style,!procura);//risca a palavra se ela estiver errada
                if (procura) {
                    StyleConstants.setForeground(style, new Color(0,0,0));//retorna a cor da palavra para preto se ela existir
                }
                else 
                {                    
                    StyleConstants.setForeground(style, new Color(255,0,0));//se a palavra estiver errada coloca ela em vermelho também
                    doc.setCharacterAttributes(indice,s.length(), style, false);
                    
                    Object[] dic = Dicionario.getSinonimos(palavra).toArray();//procura por palavras de escrita semelhante, o termo sinonimo foi infeliz aqui
                    
                    form.setPalavra(s);//passa a palvra errada para o corrtor
                    form.setSinonimos(dic);//passa as palavras de escrita semelhante para o dicionário
                    jLabel2.setText(s);
                    jList1.setListData(dic);

                    Resolucao res = new Resolucao(form);/*ERRO AQUI, ERA PARA ABRIR O FORMULÁRIO CORRETOR, MAS ELE INICIA A ABERTURA E NÃO COMPLETA A PARTE GRÁFICA
                                                         CAUSANDO UMA ESPERA ETERNA, RES AGUARDA QUE O FORMULÁRIO QUE ELA CARREGA DÊ O PRONTO, OU SEJA,
                                                          A RESPOSTA PARA O USUÁRIO ONDE RES->this.notify(), MAS COMO O FORMULÁRIO NUNCA CARREGA COMPLETAMENTE
                                                           É IMPOSSÍVEL ATINGIR O NOTIFY*/
                    synchronized(res){                        
                        try {
                            res.wait();
                        } catch (InterruptedException ex) {
                            ex.printStackTrace();
                        }                        
                    }
                }  
        }
        
    }
    
    class Resolucao implements Runnable{//classe interna
        
        FormCorretor form;
        boolean pronto;
        
        
        Resolucao(FormCorretor form){
            this.form = form;
            form.setVisible(true);
            Thread t = new Thread(this);
            t.start();       
        }
                
        
        public void run() {                          
            
            synchronized(form){         
       
                while(true){//verifica constantemente se o formulário foi respondido.

                    pronto = form.isLiberar();//verifica se o formulário está respondido
                    if (pronto){
                        form.notify();// notificaria e passaria para a próxima palara errada
                        break;
                    }

                }
                
            }
        }

apenas uma correção que eu já fiz:

public void run() {                          
            
            synchronized(this){ //corrigi aqui mas continua com o mesmo erro         
                while(true){
                    pronto = form.isLiberar();//verifica se o formulário está respondido
                    if (pronto){
                        this.notify();
                        break;
                    }
                }
                
            }
        }

Sanada a pane !!! Foi só acrescentar um thread e inverter os bloqueios.