15

私はAWTを始めたばかりで、簡単なプログラムを作成しました。正常に動作しますが、理解できないEclipseで警告メッセージが表示されます:

シリアル化可能なクラス TestGUI は、long 型の static final serialVersionUID フィールドを宣言しません

警告メッセージが AWT に関連していないことはわかっており、コード全体を投稿する必要はありませんでしたが、コードの SSCCE を作成しようとすると、警告も消えました。この警告が生成される理由がわからないので、SSCCE でどの部分を保持すればよいかわかりませんでした。したがって、コード全体!

私のコードは次のとおりです。

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

}

事前にサンクス!

4

2 に答える 2

30

Eclipse では、その警告がデフォルトで無効になっていました。Eclipse Indigo (3.7) では、デフォルトで警告が有効になっていました。設定は、ワークスペース内のすべてのものと 1 つのプロジェクトの 2 つの場所で変更できます。

ワークスペース内のすべてのプロジェクトの警告を無効にするには、ウィンドウ / 設定に移動し、Java / コンパイラ / "エラー/警告" タブを開き、"潜在的なプログラミングの問題" を開き、"Serializable class without serialVersionUID" の値を次のように変更します。無視します (または、適切だと思われるものは何でも)。

単一のプロジェクトの警告を無効にするには、プロジェクトを右クリックして [プロパティ] を選択し、[Java コンパイラ] / [エラー/警告] に移動して、[プロジェクト固有の設定を有効にする] をクリックし (必要な場合)、[潜在的なプログラミングの問題] を選択します。 「serialVersionUID のないシリアライズ可能クラス」の値を無視 (または適切と思われるもの) に変更します。

于 2012-06-15T14:46:50.580 に答える
5

TestGUIextendsFrameが実装されSerializableます。Serializableインターフェイスの要件は、final long serialVersionUIDフィールドを持つことです。詳細については、Serializable javadocを参照してください。

その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...
于 2012-06-15T14:30:24.120 に答える