KiNgPiTo Posted April 20, 2009 at 04:44 PM Report #257788 Posted April 20, 2009 at 04:44 PM Boas, Isto pode ser um bocado básico, mas não estou a perceber public void enviarMail() { ProgressMonitor pm = new ProgressMonitor(mainPanel, "A enviar email", "", 0, 100); pm.setMillisToPopup(0); pm.setMillisToDecideToPopup(0); pm.setProgress(10); SimpleEmail email = new SimpleEmail(); try { email.setDebug(true); email.setHostName("smtp.gmail.com"); email.setAuthentication("mail", "pass"); // email e pass email.setSSL(true); //email.setSmtpPort(465); (se nao der... experimentar) email.addTo(jTextField1.getText()); //destinatario email.setFrom("mail"); //emai de envio tem de ser igual ao de autenticação email.setSubject(jTextField2.getText()); email.setMsg(jTextArea1.getText()); email.send(); JOptionPane.showMessageDialog(mainPanel, "Enviado"); } catch (EmailException e) { JOptionPane.showMessageDialog(mainPanel, e.getMessage()); } } Este código é utilizado para enviar um email... O meu problema está ser associar a linha de código email.send(); ao ProgressMonitor de modo a que á medida que vai enviando o email, a barra fosse aumentando ou algo parecido... Alguma sugestão? Obrigado
magician Posted April 20, 2009 at 05:21 PM Report #257796 Posted April 20, 2009 at 05:21 PM Salvo erro não sei se consegues fazer isso assim mas por acaso nunca aprofundei totalmente esses componentes. Aqui http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html podes encontrar tudo sobre como trabalhar a monitorização. Não te sei dizer muito mais e infelizmente tempo também não é coisa que tenha tido muito ultimamente lol Qualquer duvida posta. I haven’t lost my mind; it’s backed up on DVD somewhere!
KiNgPiTo Posted April 20, 2009 at 05:38 PM Author Report #257800 Posted April 20, 2009 at 05:38 PM Eu já consegui fazer uma brincadeira com delays em que acrecenta 10% por segundo mas lá está, tal como no exemplo só muda o estado por cada passo concluido... No que estou a tentar fazer, não quero as percentagens nem evolução... quero aquilo a que chamam de indeterminate mode em que aparece uma barra simplesmente a andar de um lado para o outro até que a operação esteja concluido... É aqui que surge a duvida... O código ao ser executado, o programa pára enquanto aquela linha (ou seja, o email não for enviado, o que ainda pode demorar um bocado consoante o tamanho) e ao parar tudo pára também a barra... Andei a investigar e encontrei algumas coisas sobre um método doInBackground() mas não encontrei de como o implementar... Alguma Ajuda? Obrigado
KiNgPiTo Posted April 20, 2009 at 06:30 PM Author Report #257802 Posted April 20, 2009 at 06:30 PM (edited) Obrigado pela ajuda... Com os exemplos que arranjas-te e outras pesquisas aqui fica a maneira que consegui pôr isto a funcionar como queria... public void enviarEmail() { new SwingWorker<Object, Object>() { @Override protected Object doInBackground() throws Exception { SimpleEmail email = new SimpleEmail(); try { progressBar.setVisible(true); progressBar.setIndeterminate(true); progressBar.setString("A enviar email..."); progressBar.setStringPainted(true); email.setDebug(true); email.setHostName("smtp.gmail.com"); email.setAuthentication("email", "pass"); // email e pass email.setSSL(true); //email.setSmtpPort(465); (se nao der... experimentar) email.addTo(jTextField1.getText()); //destinatario email.setFrom("email"); //email de envio tem de ser igual ao de autenticação email.setSubject(jTextField2.getText()); email.setMsg(jTextArea1.getText()); email.send(); progressBar.setString("Email Enviado..."); progressBar.setIndeterminate(!true); JOptionPane.showMessageDialog(mainPanel, "Email enviado com sucesso..."); progressBar.setVisible(!true); return true; } catch (EmailException e) { JOptionPane.showMessageDialog(mainPanel, e.getMessage()); return false; } } @Override protected void done() { try { Object obj = get(); if(obj.toString() == "true") JOptionPane.showMessageDialog(mainPanel, "Operacao concluida com sucesso. "); } catch (Exception e) { e.printStackTrace(); } } }.execute(); } Se alguém tiver alguma sugestão para melhorar, agradecia, mas basicamente já faz o que queria... Edited January 1, 2020 at 08:48 PM by KiNgPiTo
vitortomaz Posted April 20, 2009 at 06:39 PM Report #257806 Posted April 20, 2009 at 06:39 PM muda a tua pass do email, acabaste de a publicar! 😉 http://vitortomaz.blogspot.com/
Knitter Posted April 20, 2009 at 06:43 PM Report #257808 Posted April 20, 2009 at 06:43 PM Ah, o vitortomaz foi mais rápido, mas é giro quando se colocam passwords, mesmo que o e-mail não seja usado para receber informação importante, e até ajuda a ver que tipo de passwords usas 😉 Alterei o código mas seria conveniente mudar a password, e já agora, usa uma password mais elaborada.
magician Posted April 20, 2009 at 06:44 PM Report #257810 Posted April 20, 2009 at 06:44 PM Penso que melhor só mesmo usando o output do debug para ir avançando a barra mas ai terias de ter uma Thread á parte para isso. I haven’t lost my mind; it’s backed up on DVD somewhere!
KiNgPiTo Posted April 20, 2009 at 06:55 PM Author Report #257812 Posted April 20, 2009 at 06:55 PM Ah, o vitortomaz foi mais rápido, mas é giro quando se colocam passwords, mesmo que o e-mail não seja usado para receber informação importante, e até ajuda a ver que tipo de passwords usas 😉 Alterei o código mas seria conveniente mudar a password, e já agora, usa uma password mais elaborada. a pass era só para esse email... obrigado por tirares.. 🙂 Só mais uma coisa... No método doInBackground() como é que faço para poder cancelar o que estiver a ser executado em background?
KiNgPiTo Posted April 21, 2009 at 12:01 PM Author Report #257962 Posted April 21, 2009 at 12:01 PM Ultima versão do método 😉 public void enviarEmailBack() { final SwingWorker<Object, Object> sw = new SwingWorker<Object, Object>() { @Override protected Object doInBackground() throws Exception { jButton23.setEnabled(false); cancelarBDF.setEnabled(!false); conf = true; progressBar.setVisible(true); progressBar.setIndeterminate(true); progressBar.setString("A enviar email..."); progressBar.setStringPainted(true); String docc = "Docs\\temp" + nomeDocpImp + ".pdf"; File f = new File(docc); EmailAttachment attachment = new EmailAttachment(); attachment.setPath(f.getPath()); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("File"); attachment.setName(f.getName()); // Obtem o nome do arquivo try { Connection con = DriverManager.getConnection(BDliga); PreparedStatement ps = con.prepareStatement("select * from email where pos = 1"); ps.execute(); ResultSet rs = ps.getResultSet(); rs.next(); MultiPartEmail email = new MultiPartEmail(); email.setDebug(true); email.setHostName(rs.getString("serversmtp")); email.setAuthentication(rs.getString("endereco"), rs.getString("palavrapasse")); email.setSSL(true); email.addTo(jTextField5.getText()); //destinatario email.setFrom(rs.getString("endereco")); //email de envio tem de ser igual ao de autenticação email.setSubject(jTextField6.getText()); email.setMsg(jTextPane2.getText()); email.attach(attachment); email.send(); progressBar.setString("Email Enviado..."); progressBar.setIndeterminate(!true); JOptionPane.showMessageDialog(jJanEnviarEmail, "Documento enviado com sucesso via E-mail"); progressBar.setVisible(!true); cancelarEnviarEmail(); jButton23.setEnabled(!false); cancelarBDF.setEnabled(false); conf = false; return true; } catch (EmailException e) { JOptionPane.showMessageDialog(jJanEnviarEmail, e.getMessage()); conf = false; progressBar.setIndeterminate(false); progressBar.setString("Erro ao enviar..."); return false; }catch (SQLException se) { JOptionPane.showMessageDialog(jJanEnviarEmail, se.getMessage()); conf = false; progressBar.setIndeterminate(false); progressBar.setString("Erro ao enviar..."); return false; } } @Override protected void done() { try { Object obj = get(); conf = false; jButton23.setEnabled(!false); cancelarBDF.setEnabled(false); } catch (Exception e) { e.printStackTrace(); } } }; cancelarBDF.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try{ conf = true; progressBar.setIndeterminate(true); progressBar.setString("A cancelar envio..."); sw.cancel(true); }catch(CancellationException ce){ JOptionPane.showMessageDialog(jJanEnviarEmail, ce.getMessage() + "\n\n\n" + ce); } } }); sw.execute(); } Mas apesar do cancelar funcionar bem, este não está a cancelar imediatamente, ou seja, fiz um debug e o cancel() não avança a partir da linha em que se encontra mas ainda termina essa... Haverá alguma maneira de fazer com que termine imediatamente e não acabe de executar a linha de código que está a ser executada?
vitortomaz Posted April 22, 2009 at 10:05 AM Report #258184 Posted April 22, 2009 at 10:05 AM Mas apesar do cancelar funcionar bem, este não está a cancelar imediatamente, ou seja, fiz um debug e o cancel() não avança a partir da linha em que se encontra mas ainda termina essa... Haverá alguma maneira de fazer com que termine imediatamente e não acabe de executar a linha de código que está a ser executada? Eu diria por norma não cancela imediatamente, repara que isso está a correr noutra thread e portanto terás sempre o tempo de notificação e detecção dessa notificação de cancelamento http://vitortomaz.blogspot.com/
KiNgPiTo Posted April 22, 2009 at 01:34 PM Author Report #258247 Posted April 22, 2009 at 01:34 PM Mas então não haverá maneira?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now