2012-06-15 13 views
9

acabo de empezar a trabajar en AWT e hizo un programa simple en él, funciona bien pero muestra un mensaje de advertencia en Eclipse, que no entiendo:advertencia campo serialVersionUID en Eclipse

El TestGUI clase serializable no declara un campo serialVersionUID static final de tipo long

yo sé que el mensaje de aviso no está relacionado con AWT y no había necesidad de publicar toda mi código, pero cuando he intentado hacer una SSCCE del código la advertencia también desapareció. Como no sé por qué se genera esta advertencia, no sabía qué parte retener en mi SSCCE. De ahí el código completo!

Mi código es:

import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

public class TestGUI extends Frame { 
    /** 
    * @param args 
    */ 
    private int x = 50; 
    private int y = 50; 

    TestGUI(String s) { 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent we) { 
       setVisible(false); 
       System.exit(0); 
      } 
     }); 
     addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent me) { 
       x = me.getX(); 
       y = me.getY(); 
       repaint(); 
      } 
     }); 
    } 

    public void paint(Graphics g) { 
     g.drawString("Hello Princess", 100, 100); 
     g.drawString("Mouse clicked here", x, y); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     TestGUI tg = new TestGUI("first"); 
     tg.setSize(500, 500); 
     tg.setVisible(true); 
    } 

} 

Gracias de antemano!

+1

posible duplicado de [¿Qué es un serialVersionUID y por qué debería usarlo?] (Http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use- it) –

Respuesta

20

Eclipse solía tener esa advertencia desactivada por defecto. En Eclipse Indigo (3.7), el valor predeterminado era habilitar la advertencia. Puede cambiar la configuración en 2 lugares, uno para todo en el espacio de trabajo y otro para un solo proyecto.

Para desactivar el aviso para todos los proyectos en el espacio de trabajo, vaya a Ventana/Preferencias y abra la ficha Java/Compilador/"Errores/Advertencias" y abra "Los posibles problemas de programación", a continuación, cambiar el valor de " Clase serializable sin serialVersionUID "Ignorar (o lo que sea que considere apropiado).

Para desactivar la advertencia de un proyecto simple , puede hacer clic derecho en el proyecto, seleccionar Propiedades, luego ir a Compilador de Java/"Errores/Advertencias", hacer clic en Habilitar configuraciones específicas del proyecto (si es necesario), luego seleccione "Posibles problemas de programación" y cambie el valor de "Clase serializable sin ID de serialVersionUID" por Ignorar (o lo que crea que sea apropiado).

5

TestGUI extiende Frame que a su vez implementa Serializable. Un requisito de la interfaz Serializable es tener un campo final long serialVersionUID. Vea el Serializable javadoc para más información.

ofertas sobre la parte importante de ese Javadoc:

...it is strongly recommended that all serializable classes explicitly declare 
serialVersionUID values, since the default serialVersionUID computation is highly 
sensitive to class details that may vary depending on compiler implementations... 
+0

pero he trabajado en la serialización en el pasado y nunca he declarado ningún campo y todavía nunca recibí esta advertencia. qué es diferente esta vez? o lo que fue diferente antes? –

+0

también el javadoc dice: 'Si una clase serializable no declara explícitamente un serialVersionUID, el tiempo de ejecución de serialización calculará un valor serialVersionUID predeterminado para esa clase basado en varios aspectos de la clase, como se describe en la especificación de serialización de objetos Java (TM) .' –

+1

Es posible que Eclipse haya desactivado esa advertencia. – Poindexter

Cuestiones relacionadas