程序一直在报NoSuchElementException.....看了好久都不知道哪里出错

z5593091 2015-11-05 09:32:46

public static void Body()throws UnknownHostException, IOException {
while(true){
Socket socket=new Socket("localhost",9900);
Scanner in=new Scanner(System.in);
OutputStream os=socket.getOutputStream();
System.out.println("1-Upload File 2-Check File 3-Download 4- ");
int choice=in.nextInt();
os.write(choice);
os.flush();


socket.shutdownOutput();

InputStream is=socket.getInputStream();
int read=is.read();
if(read==1){
ClientAnalyseHandling.sendFile();
}else if(read==2){

}


os.close();
socket.close();
}
}


这是一个功能选择程序,输入1为上传文件,2为查看文件,等等,目前只做好了上传文件功能,如果选择了1则调用ClientAnalyseHandling.sendFile();方法来发送文件。 然后在发送完毕之后我希望程序能够返回功能选择界面,所以我加了while循环。
程序运行后第一次启动功能是可以的,但是第一次完成后开始循环会到功能选择时就开始报错了。


...全文
805 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
z5593091 2015-11-07
  • 打赏
  • 举报
回复
终于解决问题了, 这个方法实际上是在一个线程(线程A)的run方法里启用的,而这个线程A是在另一个线程B中被激活的。 在线程B中·我也有使用Scanner,并且在线程B结束时,将Scanner关闭了。所以导致在线程A中想要再次使用Scanner时就用不了了。 我之前一直以为线程之间是完全独立的,在这个线程中将Scanner关闭了,另一个线程中重新new出来应该就可以用了。 没想到这两个线程的Scanner之间还是会有联系的,哈哈。
soton_dolphin 2015-11-06
  • 打赏
  • 举报
回复
检查下什么地方把System.in 关闭了
解开者 2015-11-06
  • 打赏
  • 举报
回复
可能是误操作把System.in关闭了引起的,关闭Scanner会关闭里层的System.in
梦想南方 2015-11-06
  • 打赏
  • 举报
回复
Io流要比scanner 好吧
梦想南方 2015-11-06
  • 打赏
  • 举报
回复
死循环哪里还有时间close ?很久不写socket 了不太懂了。
z5593091 2015-11-05
  • 打赏
  • 举报
回复
我试过把 Scanner in=new Scanner(System.in);移到循坏外面,一样不可以,异常情况跟移之前一模一样
搬运工木木 2015-11-05
  • 打赏
  • 举报
回复
你把 Scanner in=new Scanner(System.in); 这行移到 while(true) 外面(前面)试试
z5593091 2015-11-05
  • 打赏
  • 举报
回复
我补充一下,
at Client.ClientBody.Body(ClientBody.java:19),19行如下所示:


就是刚好到int choice=in.nextInt();那里
我在网上查了说如果Scanner被关闭了的话就会出现这个异常,但是在我的代码里面没有关闭啊,难道把socket关闭也会连同Scanner对象也关了?
tony4geek 2015-11-05
  • 打赏
  • 举报
回复
看你的25行没有这个元素 。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧