Java JLabel序列化时会丢失粗体字体样式
我有一个用save函数编写的程序,它使用序列化来保存主对象。但是,我注意到,虽然整个程序都正确地序列化了,但JLabel在序列化后会直接从粗体字体更改为常规字体。我创建了一个SSCCE来说明我所经历的,我将在本文末尾发布。但我的问题是,为什么会发生这种情况?连载出错似乎是随机的。是否有一种方法可以避免序列化时JLabel中的这种样式更改 SSCCEE:Java JLabel序列化时会丢失粗体字体样式,java,serialization,fonts,jlabel,Java,Serialization,Fonts,Jlabel,我有一个用save函数编写的程序,它使用序列化来保存主对象。但是,我注意到,虽然整个程序都正确地序列化了,但JLabel在序列化后会直接从粗体字体更改为常规字体。我创建了一个SSCCE来说明我所经历的,我将在本文末尾发布。但我的问题是,为什么会发生这种情况?连载出错似乎是随机的。是否有一种方法可以避免序列化时JLabel中的这种样式更改 SSCCEE: import javax.swing.*; import java.awt.*; import java.awt.event.*; import
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class JLabelSerializingTest extends JFrame
{
public JLabel theLabel = new JLabel("This is a JLabel with bold text.");
{
theLabel.setAlignmentX(CENTER_ALIGNMENT);
theLabel.setFont(theLabel.getFont().deriveFont(1));
}
public JButton theButton = new JButton("Serialize the JLabel");
{
theButton.setAlignmentX(CENTER_ALIGNMENT);
theButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("This is a test"));
o.writeObject(theLabel);
o.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
});
}
public JLabelSerializingTest()
{
setLayout(new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS));
add(Box.createVerticalGlue());
add(theButton);
add(theLabel);
add(Box.createVerticalGlue());
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args)
{
new JLabelSerializingTest().setVisible(true);
}
}
只是更新一下,我还没有找到任何答案。我不知道如何“碰撞”该线程,但这是一种试图让公众重新关注它的尝试。这不是您想要的答案(因此这是一条评论),但我通常会尽量避免序列化GUI。相反,我尝试持久化数据,然后使用这些数据填充我的GUI。我完全同意。我更愿意这样做,只是在这个特定的程序中,我有很多不同的数据字段&完成编码需要一个严格的时间段,所以我最终要花时间为程序添加功能,而不是创建一个算法,将数据保存在主对象中,然后再将其读回。幸运的是,作为一种快速编码解决方案,序列化几乎可以完美地工作(显然,除此之外),即使丢失粗体字体样式也没什么大不了的。我认为,有些标签在粗体上看起来更漂亮。考虑使用类似的东西而不是序列化。