import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class TextComponentTest {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TextComponentFrame frame = new TextComponentFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}class TextComponentFrame extends JFrame //serializable 类 TextComponentFrame 未声明类型为 long 的静态终态 serialVersionUID
{
public TextComponentFrame()
{
setTitle("TextComponentTest");
setSize(DEFAULT_WIDTH,DEFAULT_HIGHT);
final JTextField text = new JTextField();
final JPasswordField password = new JPasswordField();
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridLayout(2,2));
northPanel.add(new JLabel("UserName: ",SwingConstants.RIGHT));
northPanel.add(text);
northPanel.add(new JLabel("Password: ",SwingConstants.RIGHT));
northPanel.add(password);
add(northPanel,BorderLayout.NORTH);
final JTextArea textArea = new JTextArea(8,40);
JScrollPane scrollPane =new JScrollPane(textArea);
add(scrollPane,BorderLayout.CENTER);
//add button to append text into the text Area
JPanel southPanel = new JPanel();
JButton insertButton = new JButton("Insert");
southPanel.add(insertButton);
insertButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
textArea.append("UserName: " + text.getText() + " Password: " + new String(password.getPassword()) +"\n");
}
});
add(southPanel,BorderLayout.SOUTH);
}
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_HIGHT=300;
}
//serializable 类 TextComponentFrame 未声明类型为 long 的静态终态 serialVersionUID
就是这个警告,我不太明白这个警告的意思。
public static final long serialVersionUID=1L;
比如你先有一个类
class S{
int a;
int b;
}
使用序列化存储到硬盘
结果你发现b没有用了,删掉了
然后你反序列化,如果serialVersionUID一样就会无视掉不存在的属性或者将添加的属性设为初始值
如果不加就会报错