1. ホーム
  2. java

[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している

2022-01-29 12:21:51

質問

タイトルにあるような警告メッセージが表示されています。それを理解し、削除したいのですが。この質問に対する回答はすでにいくつか見つかりましたが、専門用語が多すぎてよく理解できません。この問題を簡単な言葉で説明することは可能でしょうか?

追伸:OOPが何であるかは知っています。オブジェクト、クラス、メソッド、フィールド、インスタンス化が何であるかは知っています。

P.P.S. 誰かが私のコードを必要とするならば、それはここにあります。

import java.awt.*;
import javax.swing.*;


public class HelloWorldSwing extends JFrame {

        JTextArea m_resultArea = new JTextArea(6, 30);

        //====================================================== constructor
        public HelloWorldSwing() {
            //... Set initial text, scrolling, and border.
            m_resultArea.setText("Enter more text to see scrollbars");
            JScrollPane scrollingArea = new JScrollPane(m_resultArea);
            scrollingArea.setBorder(BorderFactory.createEmptyBorder(10,5,10,5));

            // Get the content pane, set layout, add to center
            Container content = this.getContentPane();
            content.setLayout(new BorderLayout());
            content.add(scrollingArea, BorderLayout.CENTER);
            this.pack();
        }

        public static void createAndViewJFrame() {
            JFrame win = new HelloWorldSwing();
            win.setTitle("TextAreaDemo");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setVisible(true);
        }

        //============================================================= main
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    createAndViewJFrame();
                }
            });
        }

}

解決方法は?

からの ジャバドック :

シリアライゼーションランタイムは、各シリアライゼーション可能なクラスに対して serialVersionUID これは、デシリアライズの際に、シリアライズされたオブジェクトの送信者と受信者が、シリアライズに関して互換性のあるそのオブジェクトのクラスをロードしたことを確認するために使用されます。もし、受信者がオブジェクトのクラスをロードした場合、そのクラスは異なる serialVersionUID 対応する送信者クラスのものと異なる場合、デシリアライズは InvalidClassException . シリアライズ可能なクラスは、独自の serialVersionUID というフィールドを宣言することで、明示的に "serialVersionUID" は static で final、かつ long 型でなければなりません。

IDEに設定することができます。

  • 警告を出す代わりに、これを無視します。
  • idを自動生成する

追加の質問ですが、GUIアプリケーションがフリーズする原因は、この警告メッセージにあるのでしょうか?

いいえ、そんなことはありません。オブジェクトをシリアライズして、クラスが変更された(時)別の場所(時)でデシリアライズする場合にのみ問題が発生する可能性があり、フリーズには至りませんが InvalidClassException .