JProgressBar com tempo?!

Estou querendo fazer um JProgressBar para ele terminar o processo quando passar 5 minutos.

Eu tenho alguns exemplos aqui, convertendo os 5 minutos em milesegundos vai dar 300.000.

Eu coloco esse valor para rodar o JProgressBar e ele demora muito mais que 5 minutos.

Queria saber como resolver isso!!
[color=red]package Diversos;
import java.lang.;
import java.awt.
;
import java.awt.event.;
import com.sun.java.swing.
;
import javax.swing.*;

public class JProgress extends JPanel {
Thread hilo;
Object objeto = new Object();
boolean pideParar = false;
JTextField texto;
JProgressBar barra;

public JProgress() {
setLayout( new BorderLayout() );

texto = new JTextField();
add( texto,BorderLayout.NORTH );

JPanel panelInferior = new JPanel();
barra = new JProgressBar();
panelInferior.setLayout( new GridLayout(0,1) );
panelInferior.add( barra );
panelInferior.add( new JLabel( "Cargando..." ) );

JPanel panelBotones = new JPanel();
JButton botonArranque = new JButton( "Arrancar" );
botonArranque.setBackground( SystemColor.control );
panelBotones.add( botonArranque );
botonArranque.addActionListener( new ActionListener() {
  public void actionPerformed( ActionEvent evt ) {
iniciaCuenta();
  }
} );

JButton botonParar = new JButton( "Parar" );
botonParar.setBackground( SystemColor.control );
panelBotones.add( botonParar );
botonParar.addActionListener( new ActionListener() {
  public void actionPerformed( ActionEvent evt ) {
detieneCuenta();
  }
} );

panelInferior.add( panelBotones );
add( panelInferior,BorderLayout.SOUTH );

}

public void iniciaCuenta() {
if( hilo == null ) {
hilo = new ThreadCarga();
pideParar = false;
hilo.start();
}
}

public void detieneCuenta() {
synchronized( objeto ) {
pideParar = true;
objeto.notify();
}
}

class ThreadCarga extends Thread {
public void run() {
int min = 0;
int max = 300000;

  barra.setValue( min );
  barra.setMinimum( min );
  barra.setMaximum( max );

  for (int i=min; i &lt= max; i++ ) {
barra.setValue( i );
texto.setText( ""+i );
synchronized( objeto ) {
  if( pideParar )
    break;
  try {
    objeto.wait( 100 );
  } catch( InterruptedException e ) {
    // Se ignoran las excepciones
  }
}
  }
  hilo = null;
}

}

public static void main( String args[] ) {
JFrame frame = new JFrame( "Tutorial de Java, Swing" );

frame.addWindowListener( new WindowAdapter() {
  public void windowClosing( WindowEvent evt ) {
System.exit( 0 );
  }
});

frame.getContentPane().add( new JProgress(),BorderLayout.CENTER );
frame.setSize( 400,150 );
frame.setVisible( true );

}
}[/color]

Pelo seu código, o processo todo vai demorar 300.000 milis multiplicado por 100, o que vai dar 30.000.000 de milissegundos (ou, mais especificamente, 5.000 minutos).

Por quê?? Porque você está dando um “wait(100)” no meio do código. A cada interação, ele vai esperar 100 milis pra ir pra próxima…então o que deveria demorar 1 mili, vai demorar 100.

E 3000 eu tava vacilando!!

Valeu pela explicação!

Obrigado!

Amigo estou com outra dúvida agora.

Usando o metodo barra.getPercentComplete() ele me retorna um valor entre 0.0 e 1.0 com a porcentagem que foi percorrida pela barra.

Como eu coloquei para rodar 300.000 milesegundos, ou seja, 5 minutos. Como eu faço para transformar esse valor entre 0.0 e 1.0 em milesegundos para depois eu transformar em minutos:segundos.

Você sabe como eu faço isso?!

Pô amigão…isso é simples aritmética! :wink:

Pega o seu valor total (300.000) e multiplica pelo valor retornado pelo método (ele é um valor percentual).

Por exemplo: o método retorna 0.5 (o que significa dizer que está nos 50%). Ao multiplicar isso pelo total, vamos ter um valor de 150.000. Aí transforma isso em minutos/segundos.

Valeu!!
Faltei nessa aula! heheheheeheh

Obrigado!