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;
}
}
}
}