Java Gui和可序列化错误

Java Gui和可序列化错误,java,swing,serialization,serializable,Java,Swing,Serialization,Serializable,好的,所以我需要写一个程序来创建个人资料(简单的只有名字、照片、状态等),并添加现有的朋友。它使用ObjectOutputStream将配置文件保存在文件中。目前我面临的问题是: 我得到了可序列化的错误,我不知道它们来自哪里。 项目给出的错误 java.io.NotSerializableException:社交网络 java.io.ObjectOutputStream.writeObject0(未知源)java.io.ObjectOutputStream.defaultWriteFields

好的,所以我需要写一个程序来创建个人资料(简单的只有名字、照片、状态等),并添加现有的朋友。它使用
ObjectOutputStream
将配置文件保存在文件中。目前我面临的问题是:

  • 我得到了可序列化的错误,我不知道它们来自哪里。 项目给出的错误
  • java.io.NotSerializableException:社交网络 java.io.ObjectOutputStream.writeObject0(未知源)java.io.ObjectOutputStream.defaultWriteFields(未知源)java.io.ObjectOutputStream.writeSerialData(未知源)java.io.ObjectOutputStream.writeOrdinaryObject(未知源)
代码大约有250行,因此我将添加3条注释,其中包含发生错误的地方。Ctrl+F(这里的错误)是一个单词

    import javax.swing.*;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.border.LineBorder;

    import java.io.*;
    import java.util.ArrayList;
    public class SocialNetwork implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 904698037930887085L;
        RandomAccessFile raf ;
        JTextField setStatus ;
        JTextField addFriend ;
        JTextField emriProfilit ;
        JButton changestatus ;
        JButton setfriend ;
        JButton changepicture ;
        JButton add ;
        JButton delete ;
        JButton lookup ;
        JLabel name ;
        JLabel password ;
        JPasswordField passwordfield ;
        JLabel Banner ;
        SocialProfile profile ;
        SocialProfile temp ;
        JLabel profilepicture ;
        FileOutputStream fileoutput;
        FileInputStream fileinput ;
        ObjectOutputStream output;
        ObjectInputStream input;

        public SocialNetwork() throws FileNotFoundException{

        fileoutput = new FileOutputStream("database.dat",true);
        fileinput = new FileInputStream("database.dat");
        emriProfilit = new JTextField(15);
        name = new JLabel("Name");
        password = new JLabel("Password");
        passwordfield = new JPasswordField (7);
        lookup = new JButton("Lookup");
        add = new JButton("Add");
        delete = new JButton("Delete");
        JPanel p1 = new JPanel() ;
        p1.setLayout(new FlowLayout());
        p1.add(name);
        p1.add(emriProfilit);
        p1.add(password);
        p1.add(passwordfield);
        p1.add(add);
        p1.add(delete);
        p1.add(lookup);
        JFrame frame = new JFrame ("Social Network");
        frame.setSize(1050,500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLayout(new BorderLayout());
        frame.add(p1,BorderLayout.NORTH);
        changestatus = new JButton ("Change Status");
        setfriend = new JButton ("Add Friend");
        changepicture = new JButton ("Change Picture");
        setStatus = new JTextField (20);
        addFriend = new JTextField (15) ;
        ImageIcon sfond= new ImageIcon("images/socialnetwork.png");
        Banner = new JLabel (sfond);
        JPanel p2 = new JPanel() ;
        JPanel p3 = new JPanel() ;
        JPanel p4 = new JPanel() ;
        p4.setLayout(new GridLayout(2,1,10,10));
        p2.setLayout(new GridLayout(5,1,10,10));

        p3.add(Banner);
        p2.add(setStatus);
        p2.add(changestatus);
        p2.add(changepicture);
        p2.add(addFriend);
        p2.add(setfriend);
        p4.add(p3);
        p4.add(p2);
        p4.setBorder(BorderFactory.createLineBorder(Color.black));
    // Error here guys (sometimes it does not show )


frame.add(p4,BorderLayout.WEST);
// Veprimi i cili do kryhet mbasi të klikohet butoni changepicture
changepicture.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
        File file = browsefile();
        profile.setAvatar(file.getAbsolutePath());
        profilepicture.setIcon(profile.getAvatar());
    }

});
// Veprimi që do realizohet mbasi të jepet emri
    emriProfilit.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
        profile = new SocialProfile();  
        profile.setName(emriProfilit.getText().trim());
        emriProfilit.setFocusable(false);
    }

    });
    // Veprimi që do realizohet mbasi të jepet password-i
    passwordfield.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){

            profile.setPassword(passwordfield.getPassword());
            passwordfield.setFocusable(false);
        }

        });
    // Veprimi që do realizohet kur të klikohet butoni changestatus
    changestatus.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){

            profile.setStatus(changestatus.getText().trim());

        }

        });
    // Veprimi që do kryhet nga butoni add
    add.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){

            try {
                add(profile);
            } catch (IOException e1) {

                e1.printStackTrace();
            }

        }

        });
    // Veprimi që do kryhet nga butoni lookup
    lookup.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            String name ;   
            name = emriProfilit.getText().trim();
            try {
                if(doesitexist(name))
                    System.out.println("Ekziston");
                else
                    System.out.println("Nuk Ekziston");
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            emriProfilit.setFocusable(false);
            passwordfield.setFocusable(false);
        }

        });
}
    // Error here Guys


    public void add(SocialProfile profile) throws IOException{
            output = new ObjectOutputStream(fileoutput);
            output.writeObject(profile);
        }
        //Error here Guys


    public boolean doesitexist(String name) throws IOException, ClassNotFoundException{
            input = new ObjectInputStream(fileinput);

            try{
                while(true){
            temp = (SocialProfile)(input.readObject());
                if (temp.getName().equals(name)){
                    return true ;
                }
                }
            }
            catch (EOFException ex){
                ex.printStackTrace();
                return false ;
            }
        }
        public File browsefile(){
            JFileChooser filebrowse = new JFileChooser ();
            if (filebrowse.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){

            }
            File file = filebrowse.getSelectedFile();
            return file ;
        }



        public static void main (String[] args) throws FileNotFoundException{
        new SocialNetwork();
    }
        public class SocialProfile implements Serializable {
            /**
             * 
             */
            private static final long serialVersionUID = 2436758770296955312L;
            /**
             * 
             */

            private String name ;
            private ImageIcon avatar;
            private String status ;
            private ArrayList<String> friends ;
            private char[] password ;



            public SocialProfile(){
                status = new String ("Default Status");
                friends = new ArrayList<String>( );
                avatar = new ImageIcon ("images/defaultavatar.jpg");

            }
            public String getName (){
                return name ;
            }
            public void setName(String name){
                this.name = name ;
            }
            public void setPassword (char[] pass){
                password = pass ;
            }
            String getStatus (){
                return status ;
            }

            void setStatus (String status){
                this.status = status ;
            }

            ImageIcon getAvatar (){
                return avatar ;
            }
            void setAvatar (String avatarpicture){
                avatar = new ImageIcon(avatarpicture) ;
            }
            void addFriend (String name){
                friends.add(name);
            }
        }
    }
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.border.LineBorder;
导入java.io.*;
导入java.util.ArrayList;
公共类SocialNetwork实现可序列化{
/**
* 
*/
私有静态最终长serialVersionUID=904698037930887085L;
随机文件raf;
JTextField-setStatus;
JTextField-addFriend;
JTextField emriProfilit;
JButton变更状态;
杰布顿·塞特弗里德;
JButton变换图片;
JButton-add;
JButton删除;
按钮查找;
JLabel名称;
JLabel密码;
JPasswordField密码域;
贾拉贝尔旗;
社会福利档案;
社会福利温度;
JLabel剖面图;
文件输出流文件输出;
文件输入流文件输入;
ObjectOutputStream输出;
目标输入流输入;
public SocialNetwork()引发FileNotFoundException{
fileoutput=newfileoutputstream(“database.dat”,true);
fileinput=newfileinputstream(“database.dat”);
emriProfilit=新的JTextField(15);
名称=新的JLabel(“名称”);
密码=新的JLabel(“密码”);
passwordfield=newjpasswordfield(7);
lookup=新的JButton(“lookup”);
添加=新的JButton(“添加”);
delete=新的JButton(“delete”);
JPanel p1=新的JPanel();
p1.setLayout(新的FlowLayout());
p1.添加(名称);
p1.添加(emriProfilit);
p1.添加(密码);
p1.添加(密码字段);
p1.添加(添加);
p1.增加(删除);
p1.添加(查找);
JFrame=新JFrame(“社交网络”);
框架尺寸(1050500);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLayout(新的BorderLayout());
框架。添加(p1,边界布局。北);
changestatus=新按钮(“更改状态”);
setfriend=newjbutton(“添加朋友”);
changepicture=新按钮(“更改图片”);
setStatus=新的JTextField(20);
addFriend=新的JTextField(15);
ImageIcon sfond=新的ImageIcon(“images/socialnetwork.png”);
Banner=新的JLabel(sfond);
JPanel p2=新的JPanel();
JPanel p3=新的JPanel();
JPanel p4=新的JPanel();
p4.设置布局(新网格布局(2,1,10,10));
p2.设置布局(新网格布局(5,1,10,10));
p3.添加(横幅);
p2.添加(设置状态);
p2.添加(变更状态);
p2.添加(更改图片);
p2.添加(addFriend);
p2.添加(setfriend);
p4.添加(p3);
p4.添加(p2);
p4.setboorder(BorderFactory.createLineBorder(Color.black));
//这里的错误(有时不显示)
框架。添加(p4,边界布局。西);
//维普里米·科里赫特·布托尼改变了画面
changepicture.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
File=browsefile();
setAvatar(file.getAbsolutePath());
profilepicture.setIcon(profile.getAvatar());
}
});
//Veprimi qëdo realizohet mbasi tëjepet emri
emriProfilit.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
profile=新的社交profile();
setName(emriProfilit.getText().trim());
emriProfilit.setFocusable(假);
}
});
//Veprimi qëdo realizohet mbasi tëjepet密码-i
passwordfield.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
setPassword(passwordfield.getPassword());
passwordfield.setFocusable(false);
}
});
//Veprimi qëdo意识到kur tëklikohet butoni改变了身份
changestatus.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
setStatus(changestatus.getText().trim());
}
});
//Veprimi qëdo kryhet nga butoni补充道
add.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
试一试{
添加(配置文件);
}捕获(IOE1异常){
e1.printStackTrace();
}
}
});
//Veprimi qëdo kryhet nga butoni查找
lookup.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
字符串名;
name=emriProfilit.getText().trim();
试一试{
if(doesitexist(名称))
System.out.println(“Ekziston”);
其他的
System.out.println(“Nuk Ekziston”);
}捕获(ClassNotFoundException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(IOE1异常){