我遇到了问题,我在我的应用程序中实现了一个进度条,我正在尝试使其工作。但是当我运行应用程序时发生了这个异常:
java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4.
这是我的方法:
//This method goes like event in my button
public void pegarArquivo(ActionEvent event) {
Service<Void> servico = new Service() {
@Override
protected Task createTask() {
return new Task() {
@Override
protected Void call() throws Exception {
updateMessage("Loading...");
Thread.sleep(200);
getFiles();
//nRel is my accountant
updateProgress(1, nRel);
for (int i = 0; i < nRel; i++) {
updateProgress(i + 1, nRel);
updateMessage("Loading " + (i + 1) + " de " + nRel);
Thread.sleep(400);
}
updateMessage("Finish");
return null;
}
};
}
};
status.textProperty().bind(servico.messageProperty());
barra.progressProperty().bind(servico.progressProperty());
//precisa inicializar o Service
servico.restart();
}
这是我的方法getFiles:
private void getFiles() {
// TODO add your handling code here:
JFileChooser chooser = new JFileChooser();
// Possibilita a seleção de vários arquivos
chooser.setMultiSelectionEnabled(true);
// Apresenta a caixa de diálogo
chooser.showOpenDialog(null);
//ListaAuxiliar <----------------
List<List> listaAuxiliar = new ArrayList<List>();
// Retorna os arquivos selecionados. Este método retorna vazio se
// o modo de múltipla seleção de arquivos não estiver ativada.
File[] files = chooser.getSelectedFiles();
for (File argumento : files) {
System.err.println("Argumentos: " + argumento.getPath());
caminho = argumento.getPath();
LeitorXmlCabecalho leitorCabecalho = new LeitorXmlCabecalho();
LeitorXmlGlosaLote leitorGlosa = new LeitorXmlGlosaLote();
LeitorXmlLote leitorLote = new LeitorXmlLote();
LeitorXmlPagamento leitorPagamento = new LeitorXmlPagamento();
LeitorXmlPagamentoLista leitorListaPagamento = new LeitorXmlPagamentoLista();
try {
listaContatosPL = (ArrayList<UnimedPagamentoLista>) leitorListaPagamento.realizaLeituraXML(caminho);
listaContatoslt = leitorLote.realizaLeituraXML(caminho);
listaGlosa = leitorGlosa.realizaLeituraXML(caminho);
pagamento = leitorPagamento.realizaLeituraXML(caminho);
cabecalho = leitorCabecalho.realizaLeituraXML(caminho);
listaCabecalho.add(cabecalho);
listaPagamento.add(pagamento);
listaAuxiliar.add(listaContatoslt);
String dd = argumento.getName();
ListarArquivo arq = new ListarArquivo();
arq.setArquivo(dd);
listaA.add(arq);
System.out.println("Lista: " + listaA.get(nRel).getArquivo());
} catch (ParserConfigurationException e) {
System.out.println("O parser não foi configurado corretamente.");
e.printStackTrace();
} catch (SAXException e) {
System.out.println("Problema ao fazer o parse do arquivo.");
JOptionPane.showMessageDialog(null, "Formato do Arquivo incorreto!: \n" + e, "ERRO!", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} catch (IOException e) {
System.out.println("O arquivo não pode ser lido.");
JOptionPane.showMessageDialog(null, "Arquivo não pode ser lido!: \n" + e, "ERRO!", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
atualizar();
for (List<UnimedLote> lst : listaAuxiliar) {
String nomePrestador = listaCabecalho.get(nRel).getNomePrestador();
String[] as = nomePrestador.split("/");
nomePrestador = as[0];
RelatorioExcel r = new RelatorioExcel();
String dataSistema = dataSistema();
nomeArquivo = nomePrestador + "_" + dataSistema + "_" + nRel;
codArquivoPrestador = listaCabecalho.get(nRel).getCodigoPrestador();
caminhoExcel = r.geraExcell(listaPagamento.get(nRel), listaContatosPL, listaCabecalho.get(nRel),
nomeArquivo, lst, listaGlosa);
}
codPrestador = Long.parseLong(codArquivoPrestador);
boolean arquivoSalvo = salvarArquivos(caminhoExcel, ext, nomeArquivo, codPrestador);
if (arquivoSalvo) {
System.out.println("SUCESSO");
ArquivoDAO arquivoDao = new ArquivoDAO();
arquivoDao.enviarEmail(codPrestador, nomeArquivo);
} else if (!arquivoSalvo) {
System.out.println("Erro");
}
nRel++;
}
}
任何人都可以帮助我吗?感谢。