这个问题在这里已有答案:
我有一个名为IRCConnection
的对象,它实现了Runnable
并包含一个Socket
。我用Socket
连接到服务器并在BufferedReader
的帮助下读取输入。我希望能够阻止BufferedReader
以关闭Socket。
到目前为止我尝试过的事情:
close()
方法running
设置为falseshutdownInput
volatile
keyword添加到running
BufferedReader
public class IRCConnection implements Runnable {
private BufferedReader br;
private BufferedWriter bw;
private Socket ircSocket;
// constructor and other irrelevant methods
....
// relevant methods
public void run() {
// creating socket
ircSocket = new Socket();
try {
ircSocket.setSoTimeout(100);
// opening connection
ircSocket.connect(new InetSocketAddress(getServer(), getPort()));
br = new BufferedReader(new InputStreamReader(ircSocket.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(ircSocket.getOutputStream()));
String inputLine;
while (isRunning()) {
inputLine = br.readLine();
if (inputLine != null) {
doSomething();
}
}
}
close();
} catch (IOException ie) {
log(ie);
}
}
public void close() {
if (ircSocket != null) {
if (ircSocket.isConnected()) {
setRunning(false);
try {
ircSocket.close();
} catch (IOException e) {
log(e);
}
}
}
}
}我在另一个对象中创建runnable并使用Thread(irc).start()
启动Runnable启动它。
我真的不明白我如何在两个线程中都有一个初始化和连接的Socket,或者至少能够在一个线程中停止它。
称为插座的
shutdownInput
这是正确的答案。
=>套接字对象的NPE
所以修复它。当然你可以解决NPE?