Socket + readline =空指针异常

146*_*ian 0 java sockets

这是我的课

public class MessageFrameListener{
private MessageFrame mf;
private User us;
private Contact cn;

private Socket s;
private PrintStream ps;
private BufferedReader br;


public MessageFrameListener(MessageFrame m_f, User u_s, Contact c_n){
    mf = m_f;
    us = u_s;
    cn = c_n;
    m_f.addButtonListener(new SButtonListener());
}

public void init(){
    try {
        s = new Socket(InetAddress.getLocalHost(), 8072);
        PrintStream ps = new PrintStream(s.getOutputStream());
        BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
public class SButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
            String insert = mf.getInput();
            String infoString = "m "+us.getName()+" "+cn.getName()+" "+insert;
            ps.println(infoString);
            mf.addLine(insert);
            mf.refreshInput();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这一行得到NullPointerException

    ps.println(infoString);
Run Code Online (Sandbox Code Playgroud)

像这样的旧版本可以工作(我在informize套接字里面的方法)

    public class ButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        try{
            Socket s = new Socket(InetAddress.getLocalHost(), 8072);
            PrintStream ps = new PrintStream(s.getOutputStream());
            BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));

            String infoString = "add "+us.getName()+" "+af.getName();
            ps.println(infoString);

            String result = br.readLine();

            s.close();
        } catch (UnknownHostException ex) {
            System.out.println("????? ??????????");
            ex.printStackTrace();
        } catch (IOException ex) {
            System.out.println("?????? I/? ??????");
            ex.printStackTrace();
        }


    }
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 6

这条线

PrintStream ps = new PrintStream(s.getOutputStream());
Run Code Online (Sandbox Code Playgroud)

创建一个ps隐藏的局部变量this.ps.将其更改为

ps = new PrintStream(s.getOutputStream());
Run Code Online (Sandbox Code Playgroud)

为了初始化ps成员变量.