[英]Socket + readline = Null pointer Exception
這是我的課
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();
}
}
我在這一行得到NullPointerException
ps.println(infoString);
像這樣的舊版本有效(我在方法中初始化套接字)
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();
}
}
線
PrintStream ps = new PrintStream(s.getOutputStream());
創建一個隱藏this.ps
的局部變量ps
。 更改為
ps = new PrintStream(s.getOutputStream());
為了初始化ps
成員變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.