¿Problema con barra de progreso en java?

Estoy aprendiendo Java con Netbeans y tengo un problema con una gui de una barra de progreso, el caso es que la barra de progreso en cuestión me sale, lo que no me sale es el movimiento, y debo ser torpe por que lo estoy cogiendo de un tutorial que si funciona, pero a mi no se me mueve. Espero que alguien me pueda ayudar.
Aqui el codigo.
import javax.swing.*;
import java.awt.*;
public class BarradeProgreso extends JFrame{
int num = 0;
//ESTA VARIABLE LA HE DECLARADO AQUI PARA QUE LA FUNCION moviendobarraprogreso()
//PUEDA UTILIZAR LA BARRA DE PROGRESO CREADA
JProgressBar actual;
public BarradeProgreso() {
super("Barra de progreso");
setSize(205, 68);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//GESTOR DE DISEÑO
FlowLayout diseño=new FlowLayout();
setLayout(diseño);
//creamos barra de progreso
actual = new JProgressBar(0, 2000);
//EL SET VALUE DICE QUE CANTIDAD DE PROGRESO TIENE
actual.setValue(0);
//muestra el porcentaje en la barra de progreso
actual.setStringPainted(true);
//añadimos este componente a la barra de progreso
add(actual);
// setVisible(true);
}
//ESTA FUNCION LE DA MOVIMIENTO A LA BARRA DE PROGRESO
public void moviendo()
{
while(num < 2000)
{actual.setValue(num);
try
{Thread.sleep(1000); }
catch
(InterruptedException e)
{num+=95;}
}
}
public static void main(String[] args) {
BarradeProgreso marco =new BarradeProgreso();
marco.setVisible(true);
marco.moviendo();
//
//HACEMOS EL MARCO VISIBLE
// marco.setVisible(true);
}
}
Para mi que el fallo esta aquí
public void moviendo()
{
while(num < 2000)
{actual.setValue(num);
try
{Thread.sleep(1000); }
catch
(InterruptedException e)
{num+=95;}
}
}
Por que lo demás si funciona, y la verdad que no entiendo muy bien el bucle, ya que lo del try y el catch no sabia que se podía usar en bucles ¿no habría alguna forma de hacer lo mismo de forma más sencilla? ¿Por qué falla el código?
Respuesta
1
Tu problema es muy sencillo de solucionar, el error esta en el método moviendo
Ya que al hacer esto
public void moviendo() {
while (num < 100) {
actual.setValue(num);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
num += 1;
}
}
}
No mueves nada, no te das cuenta?
Mientras que num sea menor que 100 ... Setea el numero a la barra de progreso, luego duerme un rato el hio, PERO SI HAY ERROR, AUMENTA EN 1 LA BARRA DE PROGRESO, como no va a haber error, nunca va a aumentar jajajaj, solo hacer falta agregar num+=1 abajo del setValue(num), quedaría así
public void moviendo() {
while (num < 100) {
actual.setValue(num);
num+=1; //aca aumenta
try {
Thread.sleep(100);
} catch (InterruptedException e) {
System.out.println("Error en el sleep");
}
}
}
Eso seria todo =) je je como te das cuenta, es algo muy sencillo, yo he redefinido tu barra a (0,100) en vez de (0,2000) para hacerlo más rapido y aumentado el contador en 1 en vez de 95
La verdad que hay cosas que no entiendo, y es como lo mismo puede a una persona funcionar y a otra no. Como dije esto lo saque de un tutorial y a el le funciono exactamente igual a como lo puse y a mi no. Pero gracias a tu solución funciona de perlas, genial. Y la verdad que es cierto lo que dices, en el catch el num+= no hacia nada, pero la verdad que te ciegas y te ciegas y al ser algo nuevo crees que esta bien aunque no sea así.
Pues nada muy agradecido, 5 estrellas y te añado por si tengo más dudas, que seguro, conforme siga avanzando con el temario, las tendré.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas