求教多线程问题! 运行后不停的~~~抛异常
程序目标是想实现: 用户在控制台输入内容, 程序接收到用户的输入以后,启动一个单独的线程, 这个线程的作用是延时10秒把这个内容回显到控制台, 在这期间用户可继续输入内容, 每次输入都启动一个线程.
可是运行时, 当我输入第一个内容,回车后,控制台就开始不停(对!~是不停...)的抛Stream closed的Exception, 可是我并没有退出循环, 怎么会执行br.close()呢?
以下是程序的两个类的代码
package net;public class NetThread implements Runnable{ String data = null; //constructor public NetThread(String data){ this.data = data; } //run method public void run(){ try { System.out.println("Start sending..."); Thread.sleep(10000); //delay time System.out.println("Sending completely! The message is: " + data); } catch (InterruptedException e) { e.printStackTrace(); } }}
package net;import java.io.*;public class Test { public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = null; while(true){ try { System.out.println("Please enter: "); input = br.readLine(); //accept input from console if(input.equals("quit")){ System.out.println("Quit successfully!"); break; // exit } //create and start sending thread Thread nt = new Thread(new NetThread(input)); nt.start(); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = null; while(true){ try { System.out.println("Please enter: "); input = br.readLine(); //accept input from console if(input.equals("quit")){ System.out.println("Quit successfully!"); br.close(); break; // exit } //create and start sending thread Thread nt = new Thread(new NetThread(input)); nt.start(); } catch (IOException e) { e.printStackTrace(); } } }
[解决办法]
public static void main(String[] args){ while(true){ //放这试下吧。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = null; try { System.out.println("Please enter: "); input = br.readLine(); //accept input from console if(input.equals("quit")){ System.out.println("Quit successfully!"); break; // exit } //create and start sending thread Thread nt = new Thread(new NetThread(input)); nt.start(); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }