Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel序列化时会丢失粗体字体样式_Java_Serialization_Fonts_Jlabel - Fatal编程技术网

Java JLabel序列化时会丢失粗体字体样式

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

我有一个用save函数编写的程序,它使用序列化来保存主对象。但是,我注意到,虽然整个程序都正确地序列化了,但JLabel在序列化后会直接从粗体字体更改为常规字体。我创建了一个SSCCE来说明我所经历的,我将在本文末尾发布。但我的问题是,为什么会发生这种情况?连载出错似乎是随机的。是否有一种方法可以避免序列化时JLabel中的这种样式更改

SSCCEE:

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。我完全同意。我更愿意这样做,只是在这个特定的程序中,我有很多不同的数据字段&完成编码需要一个严格的时间段,所以我最终要花时间为程序添加功能,而不是创建一个算法,将数据保存在主对象中,然后再将其读回。幸运的是,作为一种快速编码解决方案,序列化几乎可以完美地工作(显然,除此之外),即使丢失粗体字体样式也没什么大不了的。我认为,有些标签在粗体上看起来更漂亮。考虑使用类似的东西而不是序列化。