在 Java 中序列化和反序列化对象时出现 bufferedImage 错误

bufferedImage error while serializing and deserializing objects in Java

我正在尝试序列化和反序列化 class 下载的对象,但遇到以下错误:

java.io.NotSerializableException: java.awt.image.BufferedImage

我检查了我的代码很长时间,但不幸的是我还没有找到罪魁祸首,我什至评论了与图标相关的部分,但还是没有运气。
这是 class 下载的代码:

import jdk.internal.org.objectweb.asm.commons.SerialVersionUIDAdder;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.Serializable;
import java.net.URL;
import java.text.Format;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Random;

public class Download extends JPanel implements Serializable {
    private String fileName;
    private boolean removed = false;
    private double downloadSpeed;
    private double downloadedSize;
    private double sizeOfFile;
    LocalTime downloadTime;
    LocalDate downloadDate;
    private boolean checked = false;
    private static final long serialVersionUID = 1113799434508676095L;


    public Download (MainPage c,URL url,LocalTime time,LocalDate date) {

        setLayout(null);
        downloadDate = date;
        downloadTime = time;
        fileName = url.getFile();
        JCheckBox checkbox = new JCheckBox();
        checkbox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED)
                    setChecked(true);
                else
                    setChecked(false);
            }
        });
        checkbox.setBackground(new Color(186,212,215));
        checkbox.setBounds(95,42,17,15);
        add(checkbox);
        MouseAdapter a = new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                super.mouseEntered(e);
                setBackground(new Color(224,235,252));
                checkbox.setBackground(new Color(224,235,252));
            }

            @Override
            public void mouseExited(MouseEvent e) {
                super.mouseExited(e);
                setBackground(new Color(186,212,255));
                checkbox.setBackground(new Color(186,212,255));
            }
        };
        UIManager.put("ProgressBar.background", new Color (235,255,255));
        UIManager.put("ProgressBar.foreground", new Color (10,109,63));
        UIManager.put("ProgressBar.selectionBackground", Color.RED);
        UIManager.put("ProgressBar.selectionForeground", Color.GREEN);
        setBackground(new Color(186,212,255));
        setPreferredSize(new Dimension(600,100));
        JPanel file = new JPanel();
      /*  test fileImg = new test("file.png");
        fileImg.setBounds(10,10,40,50);
        add(fileImg); */
        JLabel fileNameLabel = new JLabel(fileName);
        fileNameLabel.setBounds(100,5,400,15);
        fileNameLabel.setForeground(new Color(109,111,114));
        add(fileNameLabel);
        JProgressBar jpb = new JProgressBar(0,100);
        Random r = new Random();
        jpb.setValue(r.nextInt(100));
        jpb.setBounds(100,25,400,10);
        JLabel progressBarValue = new JLabel("%" + jpb.getValue() + "");
        progressBarValue.setBounds(510,18,25,20);
        add(progressBarValue);
        this.setBorder(BorderFactory.createMatteBorder(0,0,2,0,new Color(18,42,79)));
        addMouseListener(a);
        add(jpb);
        JButton trash = new JButton(  /* new ImageIcon("trash.png") */ "trash");
        trash.setBounds(115,40,25,25);
        trash.setContentAreaFilled(false);
        trash.setFocusPainted (false);
        trash.setBorderPainted(false);
        trash.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                 /*   File f = new File("nd.txt");
                    FileInputStream fis = new FileInputStream(f);
                    int numOfDownloads = (fis.read() - (int) '0');
                    FileOutputStream fos = new FileOutputStream(f);
                    numOfDownloads--;
                    fos.write(numOfDownloads + (int) '0'); */
                    setRemoved(true);
                    c.updateList();
                    c.showList();
                }
                catch (Exception ei) {
                    System.out.println(ei);
                }
            }
        });
        add(trash);
        double lower = 0;
        double upper = 999.99;
        sizeOfFile = Math.random() * (upper - lower) + lower;
        downloadSpeed = Math.random() * (upper - lower) + lower;
        downloadedSize = jpb.getValue() * sizeOfFile / 100;
        JLabel downloadSpeedLabel = new JLabel (String.format ("%.1fKbs",downloadSpeed));
        JLabel downloadedSizeLabel = new JLabel (String.format ("%.1fMG / %.2fMG",downloadedSize,sizeOfFile));
        downloadedSizeLabel.setForeground(new Color(109,111,114));
        downloadSpeedLabel.setForeground(new Color(109,111,114));
        downloadSpeedLabel.setBounds(250,35,100,30);
        downloadedSizeLabel.setBounds(420,35,150,30);
        add(downloadSpeedLabel); add(downloadedSizeLabel);
        }

    public boolean isRemoved() {
        return removed;
    }

    public void setRemoved(boolean removed) {
        this.removed = removed;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public double getDownloadSpeed() {
        return downloadSpeed;
    }

    public void setDownloadSpeed(double downloadSpeed) {
        this.downloadSpeed = downloadSpeed;
    }

    public double getDownloadedSize() {
        return downloadedSize;
    }

    public void setDownloadedSize(double downloadedSize) {
        this.downloadedSize = downloadedSize;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public double getSizeOfFile() {
        return sizeOfFile;
    }

    public void setSizeOfFile(double size) {
        this.sizeOfFile = size;
    }
}  

如果有人能帮我找出原因,我将不胜感激。
提前致谢。

已解决:问题出在我使用 BufferedImage 的 class "test" 中。我得到那个错误的原因甚至很难我评论那部分,是在评论那部分之前,我曾经 运行 程序并且当我试图反序列化已经制作的文件时,我遇到了错误。