Foros del Web » Programación para mayores de 30 ;) » Java »

al agregar las imagenes el programa se congela

Estas en el tema de al agregar las imagenes el programa se congela en el foro de Java en Foros del Web. muy buenas, una vez mas me gustaría consultar una duda, estoy teniendo un problema con un programa y es que he puesto unas imagenes, al ...
  #1 (permalink)  
Antiguo 14/12/2014, 18:54
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
al agregar las imagenes el programa se congela

muy buenas, una vez mas me gustaría consultar una duda, estoy teniendo un problema con un programa y es que he puesto unas imagenes, al abrir el programa el jframe aparece en blanco,pero al redimensionarlo aunque solo sea un poquito se cargan todas las imagenes y el programa funciona con normalidad, el código se para exactamente en este punto, al agregar la url y cargar la imagen, y no entiendo porqué, alguien sabría darme una solución?

public Image imagen,imagen2;
public URL url,url2;
Rectangulos rectangulo;
Panel panel;

public Pelota(){

url=this.getClass().getResource("/imagenes/meteorito1.gif");
imagen=new ImageIcon(url).getImage();


//cuando choca
url2=this.getClass().getResource("/imagenes/explosion.gif");
imagen2=new ImageIcon(url2).getImage();




}
  #2 (permalink)  
Antiguo 15/12/2014, 02:13
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: al agregar las imagenes el programa se congela

Buenas,

Estas inicializando correctamente el JFrame en el EDT usando SwingUtilities.invokeLater?

Si no es asi o no estas seguro, puedes poner tu codigo de inicializacion de la aplicacion (main)?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 15/12/2014, 03:22
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: al agregar las imagenes el programa se congela

muy buenas, no estoy poniendo ningún invoke later, estuve probando ahora pero no sé muy bien donde encajarlo, el invoke later solo funciona en la misma clase? imagino que si pudiera llamar al método paint del jpanel antes de nada mi problema estaría solucionado,porque al redimensionar la ventana creo que el jframe llama al método paint automaticamente y a partir de ahí el programa funciona con normalidad, pero no he sido capaz

LO INICIO AQUI (lo único que hago es llamar a la clase del jframe)
----------------------------------------------------------------------------------------------------------
public class Rebot {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws InterruptedException {
Ventana ventana=new Ventana();

}

}




EL PRINCIPIO DE LA CLASE DEL JFRAME
-------------------------------------------------------------------------------------------------------------------
public Ventana() throws InterruptedException{

int anchura=407;
int altura=500;
this.setBounds(0,0,anchura,altura);
this.setTitle("ventana");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setLocationRelativeTo(null);
this.setVisible(true);


//objetos creados

panel=new Panel();

//añadidos
this.add(panel);

while (true){

panel.repaint();
Thread.sleep(5);

}



este es el principio de la clase del panel
----------------------------------------------------------------------------------------------

public Panel(){

pelota=new Pelota();
rectangulo= new Rectangulos();


url=this.getClass().getResource("/imagenes/espacio.jpg");


}







//pinturas
public void paint (Graphics g) {



imagen=new ImageIcon(url).getImage();


g.drawImage(imagen,0,0,this.getWidth(),this.getHei ght(),this);

g.drawImage(pelota.imagen,pelota.xpelota,pelota.yp elota,30,30,this) ;

Última edición por dr4; 15/12/2014 a las 03:28
  #4 (permalink)  
Antiguo 15/12/2014, 03:57
dr4
 
Fecha de Ingreso: noviembre-2014
Mensajes: 28
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: al agregar las imagenes el programa se congela

lo he solucionado, ahora funciona perfectamente pero alguien podría explicarme que estoy haciendo aquí?

public Panel(){



url=this.getClass().getResource("/imagenes/espacio.jpg");

Runnable doHelloWorld = new Runnable() {
public void run() {

pelota=new Pelota();
rectangulo= new Rectangulos();

}
};

SwingUtilities.invokeLater(doHelloWorld);




}

sé que el código se estaba parando en las imagenes de la clase "pelota",pero con este invoke later lo que hago no es simplemente saltar esa parte del codigo y luego volver a ellas? quiero decir, debería de seguir bloqueandose igual, o se salta complementamente esa parte del código hasta haber leído todo lo demás?
  #5 (permalink)  
Antiguo 15/12/2014, 04:16
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: al agregar las imagenes el programa se congela

Buenas,

Lo que estas haciendo es encolar los elementos en el hilo de eventos.
No tiene sentido empezar a hacer juegos sin comprender la base. Es como empezar la casa por el tejado.

Cambia tu main por:

Código Java:
Ver original
  1. public static void main(String[] args) throws InterruptedException {
  2. SwingUtilities.invokeLater(new Runnable()
  3.     {
  4.         public void run()
  5.         {
  6.             Ventana ventana=new Ventana();
  7.         }
  8.     });
  9. }


Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 15/12/2014 a las 04:21

Etiquetas: congela, imagenes, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:35.