Fiz um pequeno aplicativo aqui só pra teste mesmo que envia email. No final do envio ele exibe um JOptionPane falando se enviou ou nao o email. Porém eu tava querendo fazer um JProgressBar pra ir mostrando o status do envio da msg, to lendo a API aqui: http://download.oracle.com/javase/tutorial/uiswing/components/progress.html
mas to apanhando rsrs, tem como alguem me ajudar? Como pego o tempo do envio do email pra colocar no Progress?
Eu tenho um thread que starta o envio da msg que é meu metodo sendMail(…), ai tava pensando se daria pra fazer o JProgressBar ir upando até o fim da execução desse método, se alguem puder me ajudar, muito obrigado.
A atualização do JProgressBar (set…) deve ser realizado em uma thread, para que não interfira no processo normal. O problema é definir o ponto inicial e final da tua barra de progresso. Uma alternativa seria obter o tamanho total do e-mail (em bytes, por exemplo) e ir obtendo a quantidade de bytes enviados (não sei como fazer isso). Dessa forma, o ponto final do JProgressBar seria o tamanho do e-mail.
evertonsilvagomesjav
Eder Peixoto:
Olá Everton!
A atualização do JProgressBar (set…) deve ser realizado em uma thread, para que não interfira no processo normal. O problema é definir o ponto inicial e final da tua barra de progresso. Uma alternativa seria obter o tamanho total do e-mail (em bytes, por exemplo) e ir obtendo a quantidade de bytes enviados (não sei como fazer isso). Dessa forma, o ponto final do JProgressBar seria o tamanho do e-mail.
Opa boa idéia rsrs, vou ver se consigo fazer, o problema é que nunca utilizei JProgress… ai estou meio perdido.
Eric_Yuzo
Não sei se é essa a sua dúvida, mas vai um exemplo simples de utilização do JProgressBar. No método getProgressBar() é que estão as principais inicializações do JProgressBar. Depois teria que trabalhar em cima da atualização dos valores conforme sua necessidade.
publicclassProgressBarTestextendsJFrame{JProgressBarprogressBar;intvalue;publicProgressBarTest(){setSize(400,50);getContentPane().add(getProgressBar());Threadt=newThread(newProgressRunnable());t.start();}privateJProgressBargetProgressBar(){if(progressBar!=null)returnprogressBar;progressBar=newJProgressBar();progressBar.setMinimum(0);//seta o valor do início da barraprogressBar.setMaximum(100);//seta o valor do fim da barravalue=progressBar.getMinimum();progressBar.setStringPainted(true);//Exibe uma string na barraprogressBar.setString("Em andamento...");//seta a string a ser exibidareturnprogressBar;}privateclassProgressRunnableimplementsRunnable{publicvoidrun(){try{while(value<=progressBar.getMaximum()){EventQueue.invokeLater(newRunnable(){publicvoidrun(){progressBar.setValue(value++);//atualiza o valor da barra}});Thread.sleep(50);}}catch(InterruptedExceptionex){ex.printStackTrace();}}}publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){@Overridepublicvoidrun(){newProgressBarTest().setVisible(true);}});}}
evertonsilvagomesjav
Eric, obrigado pelo post, mas tipo vc tem alguma idéia pra mim coloca no while, para que o progress seja atualizado de acordo com o envio do email? E parar quando o email for enviado?
evertonsilvagomesjav
Eu peguei a String da mensagem e converti ela em bytes e joguei o maximum do progressBar o length desse array, é o correto?
Eric_Yuzo
Então, é que eu não sei se tem como pegar a quantidade de bytes que já foi enviado. Se der pra fazer isso, teria que ir setando este valor dentro da thread.
Não pode ser uma barra que fica andando de um lado pro outro até terminar? Só pra dizer que ainda está processando? Aí pode setar como indeterminate.
progressBar.setIndeterminate(true);
evertonsilvagomesjav
[quote=Eric Yuzo]Então, é que eu não sei se tem como pegar a quantidade de bytes que já foi enviado. Se der pra fazer isso, teria que ir setando este valor dentro da thread.
Não pode ser uma barra que fica andando de um lado pro outro até terminar? Só pra dizer que ainda está processando? Aí pode setar como indeterminate.
progressBar.setIndeterminate(true);
hehe eu usei o setIndeterminate mesmo rsrs, porém com ele nem preciso de usar Thread.