o Contato.");// Logger.getLogger(XmlUtil.class.getName()).log(Level.SEVERE, null, npe); } } else { erros++; debugResults(result, erros); } } input.close(); this.setTotalImportados(imports); this.setContatosImportados(contatosOk);// para acessarmos apos a importacao System.out.println("Total de erros:" + erros); setErrosImportacao(erros); if (erros == 0) { return true; } else { return false; } } catch (IOException ex) { Logger.getLogger(XmlUtil.class.getName()).log(Level.SEVERE, null, ex); } // arquivos com tags erradas catch (com.thoughtworks.xstream.io.StreamException ex) { System.err.println("Problemas com o arquivo :" + F); Logger.getLogger(XmlUtil.class.getName()).log(Level.SEVERE, null, ex); } return false; } private void debugResults(BeanPropertyBindingResult result, int erroN) { System.out.println("Erro no : " + erroN); System.out.println("Total de erros : " + result.getErrorCount()); System.out.println("-------------------------------------------------"); String erros = ""; List<ObjectError> allObjectErrors = result.getAllErrors(); for (ObjectError objectError : allObjectErrors) { if (objectError instanceof FieldError) { FieldError fieldError = (FieldError) objectError; System.out.println("O campo e: " + fieldError.getField()); } System.out.println("Codigo " + Arrays.asList(objectError.getCodes()).toString()); System.out.println("Codigo de erro: " + objectError.getCode()); System.out.println("Mensagem Default: " + objectError.getDefaultMessage()); System.out.println(); erros += "- " + objectError.getDefaultMessage() + "\n"; } System.out.println("-------------------------------------------------"); }}III) e modificamos funcao importarXML do frameListaContatos private void importarXML() { JFileChooser chooser = new JFileChooser("Selecione um arquivo XML"); chooser.setFileFilter(new FileNameExtensionFilter("Arquivos XML", "xml")); int retornoJFC = chooser.showOpenDialog(null); if (retornoJFC == JFileChooser.APPROVE_OPTION) { System.out.println("Arquivo escolhido: \n" + "Pasta: " + chooser.getSelectedFile().getAbsolutePath() + "\n" + "Arquivo: " + chooser.getSelectedFile().getName()); XmlUtil xmlU = new XmlUtil(); String message; boolean importResult = xmlU.importarArquivoContatos(chooser.getSelectedFile().getAbsolutePath()); if (importResult) { message = "Importacao concluida.\n" + "Total de registros importados:" + xmlU.getTotalImportados(); atualizaGrade(); // o q fazer com os dados... } else { message = "Importacao com " + xmlU.getErrosImportacao() + "erros.\n" + "Verifique o console."; atualizaGrade(); } JOptionPane.showMessageDialog(rootPane, message); }IV) Teste o programa e tente importar o arquivo XML correto novamente, apos importar o arquivo o programa deve exibir uma mensagem de importacao concluida e a quantidade de registros incluidos, e a grade e o label Total devem ser atualizados.Figura 25 - Importacao do arquivo XML correto p/ o Myqsl.Concluido o processo e informado ao usuario quantos registros foram importadosE assim podemos importar e exportar arquivos XML do e para o Mysql, Ficando para implementar as validacoes num proximo post.Sugestao , antes de importar os dados p/ o banco , mostre-os p/ o usuario e voce pode destaca-los usando uma tecnica bem simples que expliquei nesse Tutorial colorir linhas de um jTablePois o objetivo aqui foi atendido.10) Configurando um Splash ScreenOu seja uma tela de inicializacao para o programa. Basicamente ela aparece antes da JVM carregar as classes necessarias para execucao e some quando o metodo main e chamado.Existem varios exemplos na internet de como fazer, ate no Wiki do NB e no site da Oracle-SplashSrceenVou fazer um simples : I) Crie uma imagem para o Splash, com o espaco embaixo e coloque essa imagem dentro de um novo package (splash)Figura 26 - meu SplashScreenFigura 27 - visao atual do projetoII) edite o arquivo manifest.mf (ctrl+2 Files) e adicione a entrada p/ o SplashManifest-Version: 1.0X-COMMENT: Main-Class will be added automatically by buildSplashScreen-Image: splash/splash_mcezzare_JSNBTut.pngIII) Execute Clean and Build:Figura 28 - Limpando e preparando o projeto p/ distribuicaoObserve o Output..ant -f /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07 clean jarinit:deps-clean:Updating property file: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/build/built-clean.propertiesDeleting directory /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/buildclean:init:deps-jar:Created dir: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/buildUpdating property file: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/build/built-jar.propertiesCreated dir: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/build/classesCreated dir: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/build/emptyCreated dir: /Users/surfer/NetBeansProjects/_BLOG/SpringLesson07/build/generated-sources/ap-source-outputCompiling 12 source