Usar jprogressbar em uma thread

11 respostas
S

Pessoal,
Utilizo no meu sistema uma thread que chama um método que demora a ser executado de acordo. O tempo de execução pode variar de acordo com a utilização do usuário.
Gostatia de saber se consigo fazer uma barra de progresso para monitorar a execução dessa thread.

É possivel?

public void run() {
      
    

        switch (processNumber) {
            case 1:
                break;
            case 2:
                runNodebFromKget(); // aki chama o método demorado onde gostaria de monitorar pelo jprogressbar
                break;

11 Respostas

rodrigo.bossini

Dá uma olhada na classe SwingWorker, do Java 6. Olha a descrição dela, retirada do javadoc oficial: SwingWorker is designed for situations where you need to have a long running task run in a background thread and provide updates to the UI either when done, or while processing.

Tutorial: http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

S

Eu consegui setando o valor no progressbar manual... precisava calcular a porcentagem do tempo da minha thread sem setar na mão...

Exemplo:

O método abaixo run chama o outro metodo:

public void run() {
        //throw new UnsupportedOperationException("Not supported yet.");
        switch (processNumber) {
            case 1:
 runSecondCarrier() ;
                break;}

chega nesse método que demora a execução e onde eu precisavar calcular a portentagem até acabar o processo.
[code]
private void runSecondCarrier() {
}

ViniGodoy

E você tem meios de prever isso?

S

Negativo… dependendo da maneira que o usuario esta usando a ferramenta pode ser rapido ou pode ser lento…

ViniGodoy

Se você não tem como prever, não tem como fazer o progressbar.

Você não sabe nem alguma contagem? Tipo nr de registros já processados versus nr. de registros totais?
O java não é adivinho. Sem fornecer a informação, o máximo que vc pode fazer é definir sua Progress como indeterminate e deixar ela mexendo, sem informação de percentual.

S

sei apenas o total de opções que o usuario selecionou para a ferramenta gerar… minha ferramenta le arquivos textos que variam d 30 até 60Mb.

ViniGodoy

Mas se lê arquivos, vc não pode estimar o número de bytes e contar o número de bytes processados para gerar o progressbar?

S

mais e se não ficar sincronizado?

ViniGodoy

Como assim? O mesmo método que irá ler os arquivos irá enviar a informação para o JProgressBar. Como poderia não ficar sincronizado?

S

que tipo de informação eu posso passar?

ViniGodoy

Qualquer tipo:
Número de arquivos totais/número de arquivos processados
Número de bytes totais/número de bytes processados

Depende de que informação você tenha disponível. Quando mais granular, melhor.

Criado 30 de agosto de 2011
Ultima resposta 1 de set. de 2011
Respostas 11
Participantes 3