Pessoal esotu testando uma aplicação de um jogo de Damas, e gostaria de implementar um JProgressBar antes de entrar na aplicação. Isso eu já consegui, só que eu queria mostrar a porcentagem já carregada baseada no tempo levado para a aplicação levantar.
Uso o System.currentTimeMillis() para pegar o Time ao iniciar e o Time de parada, quando para de carregar. Depois uso um método get() para pegar o tempo total em ms que minha aplicação gasta para iniciar, subtraindo o TimeFinal do TimedeInicio. Só que não consegui colocar pra mostrar a porcentagem nem associar ela com o tempo, alguem sabe o raciocinio ou o jeito adequado de se fazer isso pegando pelo tempo?
Ai vai meu código:
package game;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
/**
*
* @author fabricio
* Metodo para calculo do tempo levado para a aplicação iniciar
*/
public class TesteTempo2 extends JFrame implements Runnable {
long tempodepartida = -1;
long tempodeparada = -1;
boolean decorrido = false;
private JPanel contentpane;
private JProgressBar progressbar = new JProgressBar();
int i;
int j;
static final int minimum = 0, maximum = 100;
// construtor
public TesteTempo2(){
// implementando JProgressbar
setTitle("Carregando...");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 342, 130);
contentpane = new JPanel();
contentpane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentpane);
setLocationRelativeTo(null); // Centraliza a tela
contentpane.setLayout(null);
progressbar.setBounds(103, 55, 213, 19);
progressbar.setStringPainted(true);
// Tam minimo e maximo do ProgressBar
progressbar.setMinimum(minimum);
progressbar.setMaximum(maximum);
contentpane.add(progressbar); // add JProgressbar no Painel
new Thread(this).start(); // dispara a Thread principal
}
public void atualizaBarra(int value){
progressbar.setValue(value);
}
public TesteTempo2 start(){
tempodepartida = System.currentTimeMillis(); // pega o time atual em ms
decorrido = true; // variavel de estado indicando q esta decorrendo os calculos
return this;
}
public TesteTempo2 stop(){
tempodeparada = System.currentTimeMillis();
decorrido = false;
// para JProgressBar
return this;
}
// pegando o tempo decorrido
// implementa carregador antes do programa iniciar
public long getTempodecorrido(){
// tempo total decorrido
long i = tempodepartida;
TesteTempo2 teste = new TesteTempo2();
// pega valor do PB
j = progressbar.getValue(); // pega time depois q tudo terminou
// joga ProgressBar durante o carregamento
for(i = tempodepartida; i < tempodeparada; i++){
System.out.println("Time: "+ i);
try{
teste.setResizable(false);
teste.setVisible(true);
}catch(Exception e){
e.printStackTrace();
}
} teste.setVisible(false); // apaga depois q sai do laço
if(tempodepartida == -1){
return 0;
}
if(decorrido){ // se decorrido == true
return System.currentTimeMillis() - tempodepartida;
}else{
return tempodeparada - tempodepartida;
} // todos retornam o msm resultado: parada - partida
}
// reseta todas as variaveis
public TesteTempo2 resetar(){
tempodepartida = -1;
tempodeparada = -1;
decorrido = false;
return this;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){e.printStackTrace();}
TesteTempo2 teste = new TesteTempo2().start(); // instancia classe TesteTempo2 c/ construtor
// teste o tempo para rodar um for
long tempo = 0;
for(int i=0;i < 10000000;i++){
tempo+=i;
}
teste.stop(); // para a contagem, e pega o time final
//teste.setVisible(false);
System.out.println("Tempo decorrido: " +teste.getTempodecorrido() + " ms");
}
// metodo do run
@Override
public void run() {
try{
while(i < 101){
Thread.sleep(5);
progressbar.setValue(i++);
}
/*for (int i = minimum; i <= maximum; i++) {
TesteTempo2 teste = new TesteTempo2();
final int percent = i;
Thread.sleep(5);
teste.atualizaBarra(percent);
}*/
}catch(InterruptedException e){
e.printStackTrace();
}
}
}