Bom tarde á todos.
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.
Valeu.
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.
[quote=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.[/quote]
Opa boa idéia rsrs, vou ver se consigo fazer, o problema é que nunca utilizei JProgress… ai estou meio perdido.
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.
[code]public class ProgressBarTest extends JFrame {
JProgressBar progressBar;
int value;
public ProgressBarTest() {
setSize(400,50);
getContentPane().add(getProgressBar());
Thread t = new Thread(new ProgressRunnable());
t.start();
}
private JProgressBar getProgressBar() {
if (progressBar != null)
return progressBar;
progressBar = new JProgressBar();
progressBar.setMinimum(0); //seta o valor do início da barra
progressBar.setMaximum(100); //seta o valor do fim da barra
value = progressBar.getMinimum();
progressBar.setStringPainted(true); //Exibe uma string na barra
progressBar.setString("Em andamento..."); //seta a string a ser exibida
return progressBar;
}
private class ProgressRunnable implements Runnable {
public void run() {
try {
while (value <= progressBar.getMaximum()) {
EventQueue.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(value++); //atualiza o valor da barra
}
});
Thread.sleep(50);
}
} catch (InterruptedException ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ProgressBarTest().setVisible(true);
}
});
}
}[/code]
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?
Eu peguei a String da mensagem e converti ela em bytes e joguei o maximum do progressBar o length desse array, é o correto?
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);
[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.