1

シンプルな Java 2-D プラットフォーマーを作ろうとしています。Java は、「シリアライズ可能なクラス Display は、long 型の静的な final serialVersionUID フィールドを宣言していません」というエラーを表示し続けます。

これは、プログラムを実行しようとしたときに表示されるエラー メッセージです: http://i.imgur.com/H0Afv.png (Web サイト)

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

import javax.swing.*;

public class Main {

    public static Display f;
    public static int width = 800;
    public static int height = 600;

    public static void main(String[] args)
    {

        f = new Display();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(true);
        f.setSize(width, height);
        f.setLocationRelativeTo(null);
        f.setTitle("2-D Platformer");
    }


}
//This is my display class.

import java.awt.*;

import javax.swing.*;

/* this is where the error is
 *
 */           V 
public class Display extends JFrame{

    public Display p;
    public Display()
    {

        p = new Display();
        add(p);
        setLayout(new GridLayout(1, 1, 0 , 0));
    }
}
//and this is my display2 class
import java.awt.Color;

import javax.swing.*;

/* this is where the error is
 *too
 */            V 
public class Display2 extends JPanel{

    public Display2()
    {
        setBackground(Color.BLACK);
    }
}
4

2 に答える 2

4

これはエラーではなく、警告であり、シリアル化可能なクラス (クラスが拡張している GUI コンポーネントの 1 つ) を拡張し、Serializable インターフェイス コントラクトが規定するように最終的な serialVersionUID フィールドを与えていないことが原因です。このクラスのオブジェクトをシリアル化する (ディスクに格納する、または送信する) ことはほとんどないため、これはそれほど重要ではありません。したがって、この警告を安全に無視するか、注釈 を使用し@SuppressWarnings(“serial”)てコンパイラに伝えることができます。それを無視します。つまり、

編集: または、bhuang3 の状態のように、デフォルトの serialVersionUID を指定することもできます。彼の答えに1+!

編集2:

@SuppressWarnings(“serial”)
public class Display extends JFrame {

   // .....

}

編集 3:
次に、スーパー クラスのメソッドの一部をオーバーライドしない限り、JFrame やその他のコンポーネントを拡張するクラスを作成することが通常は必要ではなく、実際にはあまりお勧めできない理由について説明します...

于 2012-11-27T01:26:15.297 に答える
3

クラスで serialVersionUID を宣言する必要があると思いますDisplay2。例えば:private static final long serialVersionUID = 1L;

于 2012-11-27T01:27:39.040 に答える