执行Task JavaFx时出错

时间:2015-05-27 18:06:40

标签: java service javafx progress-bar task

我遇到了问题,我在我的应用程序中实现了一个进度条,我正在尝试使其工作。但是当我运行应用程序时发生了这个异常:

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

任何人都可以帮助我吗?感谢。

0 个答案:

没有答案