Tentei fazer do jeito que você falou…
Agora logo ao iniciar o processamento está mostrando a JProgressBar e o JLabel, porém está ocorrendo este erro:
org.jvnet.substance.api.UiThreadingViolationException: Component state change must be done on Event Dispatch Thread
at org.jvnet.substance.utils.SubstanceCoreUtilities.testComponentStateChangeThreadingViolation(SubstanceCoreUtilities.java:2385)
at org.jvnet.substance.SubstanceProgressBarUI$1.stateChanged(SubstanceProgressBarUI.java:156)
at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:348)
at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:285)
at javax.swing.DefaultBoundedRangeModel.setValue(DefaultBoundedRangeModel.java:151)
at javax.swing.JProgressBar.setValue(JProgressBar.java:831)
at WordFind.updateProgress.run(Importar.java:392)
at java.lang.Thread.run(Thread.java:619)
O meu código ficou assim:
No actionPerformed:
updateProgress andamento = new updateProgress(pbBar,
lbProcesso,
new Integer(txLetrasDe.getText()),
new Integer(txLetrasDe.getText()),
epTexto.getText(),
dTela);
Thread myThread = new Thread(andamento);
myThread.start();
A minha classe updateProgress está assim:
class updateProgress implements Runnable {
private Utilidades utilInstance = Utilidades.getInstance();
private int iPalavrasLidas = 0;
private int iPalavrasImportadas = 0;
private JProgressBar lpbBar;
private JLabel llbProcesso;
private int lLetrasDe;
private int lLetrasAte;
private String lTexto;
private JDialog lTela;
/**
* Cria nova instância da classe updateProgress.
*/
public updateProgress(JProgressBar ppbBar,
JLabel plbProcesso,
Integer pLetrasDe,
Integer pLetrasAte,
String pTexto,
JDialog pTela) {
lpbBar = ppbBar;
llbProcesso = plbProcesso;
lLetrasDe = pLetrasDe;
lLetrasAte = pLetrasAte;
lTexto = pTexto;
lTela = pTela;
lpbBar.setStringPainted(true);
lpbBar.setFont(new java.awt.Font("MS Sans Serif",0,9));
lpbBar.setForeground(new java.awt.Color(0, 0, 0));
lpbBar.setBackground(new java.awt.Color(0, 0, 255));
lpbBar.setValue(0);
lpbBar.setMaximum(lTexto.length());
lpbBar.setString("Importando...");
iPalavrasLidas = 0;
iPalavrasImportadas = 0;
llbProcesso.setText("Palavras Lidas: " + iPalavrasLidas + " Palavras Importadas: " + iPalavrasImportadas);
llbProcesso.setVisible(true);
lpbBar.setVisible(true);
}
@Override
public void run() {
try {
Integer iUltima = 0;
for (int i = 0; i < lTexto.length(); i++) {
if ( ( lTexto.substring(i, (i + 1)).equals(" ") |
lTexto.substring(i, (i + 1)).equals(".") |
lTexto.substring(i, (i + 1)).equals(",") |
lTexto.substring(i, (i + 1)).equals(";") |
lTexto.substring(i, (i + 1)).equals(":") |
lTexto.substring(i, (i + 1)).equals("\r") |
lTexto.substring(i, (i + 1)).equals("\n") ) & i > 0 ) {
String stPalavra = lTexto.substring(iUltima, i);
if (! stPalavra.equals(" ") ) {
iPalavrasLidas++;
this.processaPalavra(stPalavra);
}
iUltima = i + 1;
}
lpbBar.setValue(i);
}
String stPalavra = null;
if ( ! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals(".") |
! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals(",") |
! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals(";") |
! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals(":") |
! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals("\r") |
! lTexto.substring( (lTexto.length() - 1), lTexto.length() ).equals("\n") ) {
if ( iUltima < lTexto.length() ) {
stPalavra = lTexto.substring(iUltima, lTexto.length());
if (! stPalavra.equals(" ") ) {
iPalavrasLidas++;
this.processaPalavra(stPalavra);
}
}
}
lpbBar.setValue(lTexto.length());
lpbBar.setString("Importação finalizada.");
utilInstance.exibeMensagem("Atenção!","Importação efetuada com sucesso.",utilInstance.MSGINFO);
} catch (Exception e) {
String stackMensagem = utilInstance.montaMensagemErro(e.toString(),e.getStackTrace());
utilInstance.exibeMensagem("Erro","Erro ao efetuar a importação.",stackMensagem,utilInstance.MSGERROR);
}
lTela.dispose();
}
private void processaPalavra(String stPalavra) {
if ( stPalavra.length() >= lLetrasAte & stPalavra.length() <= lLetrasAte ) {
boolean isOk = true;
for (int testChar = 0; testChar < stPalavra.length() ; testChar++ ) {
if ( stPalavra.substring(testChar, (testChar + 1)).equals("0") |
stPalavra.substring(testChar, (testChar + 1)).equals("1") |
stPalavra.substring(testChar, (testChar + 1)).equals("2") |
stPalavra.substring(testChar, (testChar + 1)).equals("3") |
stPalavra.substring(testChar, (testChar + 1)).equals("4") |
stPalavra.substring(testChar, (testChar + 1)).equals("5") |
stPalavra.substring(testChar, (testChar + 1)).equals("6") |
stPalavra.substring(testChar, (testChar + 1)).equals("7") |
stPalavra.substring(testChar, (testChar + 1)).equals("8") |
stPalavra.substring(testChar, (testChar + 1)).equals("9") |
stPalavra.substring(testChar, (testChar + 1)).equals("!") |
stPalavra.substring(testChar, (testChar + 1)).equals("@") |
stPalavra.substring(testChar, (testChar + 1)).equals("#") |
stPalavra.substring(testChar, (testChar + 1)).equals("$") |
stPalavra.substring(testChar, (testChar + 1)).equals("%") |
stPalavra.substring(testChar, (testChar + 1)).equals("¨") |
stPalavra.substring(testChar, (testChar + 1)).equals("&") |
stPalavra.substring(testChar, (testChar + 1)).equals("*") |
stPalavra.substring(testChar, (testChar + 1)).equals("(") |
stPalavra.substring(testChar, (testChar + 1)).equals(")") |
stPalavra.substring(testChar, (testChar + 1)).equals("-") |
stPalavra.substring(testChar, (testChar + 1)).equals("_") |
stPalavra.substring(testChar, (testChar + 1)).equals("+") |
stPalavra.substring(testChar, (testChar + 1)).equals("=") |
stPalavra.substring(testChar, (testChar + 1)).equals("[") |
stPalavra.substring(testChar, (testChar + 1)).equals("{") |
stPalavra.substring(testChar, (testChar + 1)).equals("\"") |
stPalavra.substring(testChar, (testChar + 1)).equals("´") |
stPalavra.substring(testChar, (testChar + 1)).equals("`") |
stPalavra.substring(testChar, (testChar + 1)).equals("^") |
stPalavra.substring(testChar, (testChar + 1)).equals("~") |
stPalavra.substring(testChar, (testChar + 1)).equals("]") |
stPalavra.substring(testChar, (testChar + 1)).equals("]") |
stPalavra.substring(testChar, (testChar + 1)).equals("º") |
stPalavra.substring(testChar, (testChar + 1)).equals("<") |
stPalavra.substring(testChar, (testChar + 1)).equals(",") |
stPalavra.substring(testChar, (testChar + 1)).equals(">") |
stPalavra.substring(testChar, (testChar + 1)).equals(".") |
stPalavra.substring(testChar, (testChar + 1)).equals(":") |
stPalavra.substring(testChar, (testChar + 1)).equals(";") |
stPalavra.substring(testChar, (testChar + 1)).equals("/") |
stPalavra.substring(testChar, (testChar + 1)).equals("|") |
stPalavra.substring(testChar, (testChar + 1)).equals("\\") ) {
isOk = false;
break;
}
}
if ( isOk ) {
stPalavra = stPalavra.toUpperCase();
Palavra pesqPalavra = new Palavra();
pesqPalavra.settxPalavra(stPalavra);
DAOPalavra regPalavra = new DAOPalavra();
if (! regPalavra.localiza(pesqPalavra)) {
pesqPalavra.settxPalavra(stPalavra);
pesqPalavra.setidPalavra(utilInstance.getprxPalavra());
pesqPalavra.settxAssunto1(null);
pesqPalavra.settxAssunto2(null);
pesqPalavra.settxAssunto3(null);
regPalavra.inclui(pesqPalavra);
iPalavrasImportadas++;
}
}
}
llbProcesso.setText("Palavras Lidas: " + iPalavrasLidas + " Palavras Importadas: " + iPalavrasImportadas);
}
}
O erro está ocorrendo na linha 78, na segunda vez que passa pelo FOR. Quando a variável "i" está com o valor "0" (zero) não dá erro, mas na segunda vez (quando está com o valor "1" um) dá o erro.