• Viernes 8 de Noviembre de 2024, 20:11

Autor Tema:  Pantalla Gris Al Ejecutar Aplicacion  (Leído 3505 veces)

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Pantalla Gris Al Ejecutar Aplicacion
« en: Lunes 18 de Febrero de 2008, 17:34 »
0
Saludos compañeros, al ejecutar mi aplicacion tras varios minutos, si minimizo y maximizo dicha aplicacion, llega un momento en que no se ve la pantalla de la aplicacion, se rellena todo con un cuadro gris. No se si sera un problema de memoria (tng 512 MB), o de hacer algun refresh o algo parecido. También tengo varios procesos abiertos, internet etc ... pero si los cierro pasa lo mismo.

Por favor, podriais ayudarme, o indicarme por qué puede ser (es que es un poco urgente).

Muchas gracias.

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #1 en: Lunes 18 de Febrero de 2008, 18:25 »
0
Con el debugger me pasa lo mismo y cuando la aplicacion se cae (generalmentese cuando hay un ciclo que no tiene fin) y despues la maximizo, se logras resolverlo lo comentas :comp:

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #2 en: Lunes 18 de Febrero de 2008, 21:33 »
0
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #3 en: Martes 19 de Febrero de 2008, 17:53 »
0
Yo eso ya lo probe, pero nada, sigue todo igual.

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #4 en: Martes 4 de Marzo de 2008, 19:30 »
0
Alguna sugerencia, por favor ???

Os dejo el codigo que se ejecuta nada mas empezar la aplicacion, por si puede ser un caso de refresh o repintado.

public static void main(String args[]) throws IOException
  {
    JFrame principal= new JFrame();
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception exception)
    {
      exception.printStackTrace();
    }

    Proyecto proyecto = new Proyecto();
    new Splash(principal, 8000);
    principal.setDefaultCloseOperation(3);
    principal.setExtendedState( JFrame.MAXIMIZED_BOTH );
    principal.getContentPane().add(proyecto);
    principal.setSize(1024, 768);

    principal.setSize(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
    principal.setTitle("Algoritmo RPNI");
    principal.setVisible(true);
    principal.setResizable(false);
    principal.doLayout();
  }

Masiosare

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #5 en: Miércoles 5 de Marzo de 2008, 23:00 »
0
Intenta poner un window listener que mande repintar el frame cuando la ventana regrese de ser minimizada.

Código: Text
  1.  
  2.  
  3. principal.addWindowListener (
  4.  
  5. new WindowListener(
  6. public void windowDeiconified(WindowEvent e)
  7.  {
  8.   principal.repaint();
  9.  }
  10. )
  11.  
  12. );
  13.  

Este codigo asigna una instancia 'inline' de la interface 'WindowListener' al frame 'principal', en este caso iría en el metodo 'main'. Este método no es el más aconsejable, por que si se hace varias veces en un código, puede restarle considerable rendimiento a la aplicación, pero es más sencillo y el mas adecuado para la estructura que ya le diste a tu clase.

P.D.: Si ese era el problema y te funciona verifica poner alguna ventana de otra aplicación, como por ejemplo el notepad o el navegador de internet y si al regresar no te repinta bien la zona que fue cubierta por la otra ventana, prueba cambiar el nombre del metodo 'windowDeiconified' por el de windowActivated.

Espero que sea de ayuda.
El experto es aquel que sabe cada vez más sobre cada vez menos, hasta que sabe competamente todo sobre absolutamente nada.
[size=109]Ley de Murphy[/size]

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #6 en: Jueves 6 de Marzo de 2008, 14:40 »
0
Hago lo que me dices, le pongo el siguiente codigo, pero me da un error:

  public static void main(String args[]) throws IOException
  {
    JFrame principal= new JFrame();
    Proyecto proyecto = new Proyecto();
    ...
    WindowListener ventanaListener=new WindowListener () {
          public void windowDeiconified(WindowEvent e)
          {
           principal.repaint();
          }
          );
   
    principal.addWindowListener(ventanaListener);
  }

me dice lo siguiente:
windowListener cannot be resolved to a type.
Tengo la version de java 1.4.2_15.

Como lo puedo solucionar ?? o tengo que poner algun import ??
Muchas gracias.

Masiosare

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #7 en: Viernes 7 de Marzo de 2008, 03:34 »
0
Estuve tratando de probar esos codigos y encontre varias fallas (mias), la principal es que no le puedes pasar una variable a una clase interna, además de que es mejor utilizar la interface 'WindowStateListener', por que el 'WindowListener' tiene muchos métodos y nada mas se utilizaria 1.

El codigo que pude correr es muy distinto al que ambos estamos haciendo, es la otra forma de poner los 'Listeners' a los frames.

Código: Text
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4.  
  5. public class MeRepintoAlRegresar extends JFrame implements WindowStateListener
  6. {
  7.  
  8.  static MeRepintoAlRegresar principal;
  9.  
  10.  public MeRepintoAlRegresar()
  11.  {
  12.         //Crea la ventana...
  13.   super("Me repito al regresar...");
  14.    
  15.         //Esto es para que termine el programa al cerrarse la ventana.
  16.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  17.  
  18.   //le da tamaño a la ventana
  19.         setSize(300,200);
  20.  
  21.         //Le asigna el 'Listener'
  22.         addWindowStateListener(this);
  23.  
  24.         //Muestra la ventana.
  25.         show();
  26.     }
  27.  
  28.  public void paint(Graphics g)
  29.   {
  30.    g.setColor(Color.YELLOW);
  31.    g.drawString("Me he pintado...",25,60);
  32.    g.setColor(Color.RED);
  33.    g.fillRect(20,80,100,100);
  34.    //System.out.println("Me he pintado");
  35.   }
  36.  
  37.  public static void main(String[] args) {
  38.         //Dicen los de 'Sun' que esta operacion se haga asi para evitar problemas con los hilos...¿?
  39.         javax.swing.SwingUtilities.invokeLater(new Runnable() {
  40.             public void run() {
  41.                 principal = new MeRepintoAlRegresar();
  42.             }
  43.         });
  44.     }
  45.  
  46.  public void windowStateChanged(WindowEvent e) {
  47.          if(e.getNewState()==0)
  48.      {
  49.       System.out.println("Regrese de estar minimizado y me repinté");
  50.       principal.repaint();
  51.      }
  52.   }
  53.  
  54. }
  55.  

Para hacerlo asi tendrías que hacerle muchos cambios a tu código.

De cualquier forma no me ha sucedido eso de la pantalla gris, asi que no puedo garantizar que se solucione, pero al menos puede detectar cuando la ventana se regresa de estar minimizada.

Aca tiene mucha informacion al respecto...
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Es un curso sobre la API Swing.

Suerte   :ph34r:
El experto es aquel que sabe cada vez más sobre cada vez menos, hasta que sabe competamente todo sobre absolutamente nada.
[size=109]Ley de Murphy[/size]

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #8 en: Sábado 8 de Marzo de 2008, 02:53 »
0
Hola a todos...

Una cosa que me gustaría saber es cuándo exactamente se te queda colgada tu aplicación. ¿Estás ejecutando algún cálculo duro en ese momento? ¿o de repente deja de repintarse mientras está en estado de reposo.

Si pulsas algún tipo de botón o control cuando se te queda clavada, por favor, indica qué hace más o menos ese control y posteanos el trozo de código que se ejecuta.



Gracias y un saludo.



Silverfox

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #9 en: Lunes 10 de Marzo de 2008, 12:35 »
0
Simplemente aparece cuando minimo la aplicacion y esta en reposo, sin hacer ningun calculo duro ni nada.

He puesto el siguiente codigo, como me habiais indicado, pero solo aparece la ventana splash de presentacion (que no contiene nada), sin visualizar nada de la ventana principal:

  public static void main(String args[]) throws IOException
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception exception)
    {
      exception.printStackTrace();
    }


    java.awt.EventQueue.invokeLater(new Runnable()
      { public void run ()
        { JFrame principal=new JFrame();
        try{
        Proyecto proyecto = new Proyecto();
        principal.setDefaultCloseOperation(3);
        principal.getContentPane().add(proyecto);
        principal.setSize(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
        principal.setTitle("Algoritmo RPNI");
        principal.setResizable(false);
        principal.repaint();
        principal.validate();
        }

        catch(Exception exception)
        {
          exception.printStackTrace();
        }
       new Splash(principal, 8000);
        }
      });
  }

donde proyecto contiene toda la ventana principal.
Alguna sugerencia por favor ??
Muchas gracias.

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Pantalla Gris Al Ejecutar Aplicacion
« Respuesta #10 en: Lunes 10 de Marzo de 2008, 20:16 »
0
Hola...


A lo que quería yo llegar es a comprobar si estás usando una hebra de ejecución.

Verás: En Swing, todo lo que ejecutas se lanza sobre una, digamos, hebra única, que controla tanto el Swing como todos los cálculos (digamos que es una hebra dedicada al GUI de la aplicación). Si lanzas cálculos sin más, se ejecutan en esa hebra también, con el consiguiente 'cuelgue' temporal del entorno (o sea, que la pantalla no se redibuja, los botones no obedecen y la aplicación termina por quedarse inerte hasta que acaban los cálculos).

Si no lo estás haciendo, deberías probar, quizá solucione tu problema. Busca por SwingWorker en la red. Hay bibliotecas que ya implementan todo esto y sólo tendrías que añadir un par de líneas a tu proyecto. De igual modo, creo recordar que alguna versión de JSDK también incluía la clase SwingWorker de serie.
En google puedes encontrar varios tutoriales bastante sencillos, aunque no es que sea una cosa complicada si sabes de qué va el tema.


Espero que con eso se te solucione el tema.


Un saludo y ya nos contarás.

Suerte.


Silverfox