在Runnable对象中停止BufferedReader [重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

我有一个名为IRCConnection的对象,它实现了Runnable并包含一个Socket。我用Socket连接到服务器并在BufferedReader的帮助下读取输入。我希望能够阻止BufferedReader以关闭Socket。

到目前为止我尝试过的事情:

  • 从另一个Thread => NPE中为Socket对象调用close()方法
  • 从另一个线程将running设置为false
  • 将所有方法设置为同步
  • 称为套接字对象的Socket => NPE的shutdownInput
  • volatilekeyword添加到running
  • 打断了线程并希望它能打断BufferedReader
  • 扩展Thread而不是实现Runnable 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,或者至少能够在一个线程中停止它。

java multithreading sockets
1个回答
1
投票

称为插座的shutdownInput

这是正确的答案。

=>套接字对象的NPE

所以修复它。当然你可以解决NPE?

© www.soinside.com 2019 - 2024. All rights reserved.