2012-06-15 11 views
9

ho appena iniziato su AWT e ha fatto un semplice programma in esso, funziona benissimo ma mostra un messaggio di avviso in Eclipse, che non capisco:serialVersionUID avvertimento campo in eclisse

La classe TestGUI serializzabile non dichiara una finale campo serialVersionUID statica di tipo long

so che il messaggio di avviso non è correlato alla AWT e non vi era alcuna necessità di inviare tutto il mio codice, ma quando ho provato a fare uno SSCCE del codice anche l'avviso è scomparso. Poiché non so perché questo avviso è stato generato, non sapevo quale parte conservare nel mio SSCCE. Da qui l'intero codice!

Il mio codice è:

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); 
    } 

} 

Grazie in anticipo!

+1

possibile duplicato di [Che cos'è un serialVersionUID e perché dovrei usarlo?] (Http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use- it) –

risposta

20

Eclipse utilizzato per avere che l'avvertimento disabilitato per impostazione predefinita. In Eclipse Indigo (3.7), l'impostazione predefinita era abilitare l'avviso. È possibile modificare l'impostazione in 2 posizioni, una per tutto nello spazio di lavoro e una per un singolo progetto.

per disattivare l'avviso per tutti i progetti in lavoro, andare alla finestra/Preferenze e aprire la scheda Java/Compiler/"Errori/Avvertenze", e aprire "problemi di programmazione potenziali", quindi modificare il valore di " Classe serializzabile senza serialVersionUID "su Ignora (o qualsiasi altra cosa tu ritenga appropriata).

Per disattivare l'avviso per un singolo progetto, è possibile fare clic destro sul progetto, selezionare Proprietà, poi vai a Java Compiler/"Errori/Avvertenze", fare clic su Attiva impostazioni specifiche di progetto (se necessario), quindi selezionare "Potential programming problems" e cambiare il valore di "Serializable class without serialVersionUID" in Ignora (o qualsiasi altra cosa si ritenga appropriata).

5

TestGUI estende Frame che a sua volta implementa Serializable. Un requisito dell'interfaccia Serializable deve avere un campo final long serialVersionUID. Vedere lo Serializable javadoc per maggiori informazioni.

di citare la parte importante di quel 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

ma in passato ho lavorato alla serializzazione e non ho mai dichiarato tale campo e non ho mai ricevuto questo avviso. Cosa è diverso questa volta? o cosa era diverso prima? –

+0

anche javadoc dice: 'Se una classe serializzabile non dichiara esplicitamente un serialVersionUID, il runtime di serializzazione calcolerà un valore serialVersionUID predefinito per quella classe in base a vari aspetti della classe, come descritto nella specifica di serializzazione dell'oggetto Java (TM) .' –

+1

È possibile che Eclipse abbia disattivato l'avviso. – Poindexter

Problemi correlati