CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

键盘输入时,如何定时。

楼主oranjes_snjp(橘子)2006-08-03 20:12:00 在 Java / J2SE / 基础类 提问

BufferedReader   br   =   new   BufferedReader(new   InputStreamReader(System.in));  
  String   str=br.readLine();  
  .......  
  可以进行键盘输入,  
  现在问题是程序运行到br.readLine();会阻塞。  
  如果要求从键盘输入,如果1分钟内不从键盘输入,则继续执行下面的代码,程序不继续阻塞在br.readLine()。  
  该如何进行?  
  问题点数:30、回复次数:14Top

1 楼oranjes_snjp(橘子)回复于 2006-08-03 20:17:34 得分 0

这儿帖子掉得好快啊Top

2 楼hubo2003hq(rain)回复于 2006-08-03 20:42:52 得分 2

用一个线程监视呀  
   
  具体的多线程的实现就自己去找了Top

3 楼oranjes_snjp(橘子)回复于 2006-08-03 21:04:12 得分 0

如果用线程监视啊,给点提示?  
  br.readLine();  
  这个好像不能interrupt吧?Top

4 楼oranjes_snjp(橘子)回复于 2006-08-03 21:28:05 得分 0

找到的代码都是单线程的,都得等待用户输入了一个字符并回车后,才能执行readLine()下面的代码。Top

5 楼hbwhwang(【生病了,好好休息中...】)回复于 2006-08-03 23:10:23 得分 5

这个需求很难实现哦,线程也无法直接解决吧  
  是否可以这样考虑:在另一个线程中,时间一到,替你发个“回车”Top

6 楼oranjes_snjp(橘子)回复于 2006-08-04 10:24:57 得分 0

to   hbwhwang:  
  这个想法不错,那么如何将回车发到System.in流中去呢?  
  Top

7 楼will123()回复于 2006-08-04 11:39:11 得分 2

用线程吧Top

8 楼goddie2046(goddie)回复于 2006-08-04 12:03:01 得分 5

"\r"字符代表回车,试试Top

9 楼oranjes_snjp(橘子)回复于 2006-08-04 13:05:56 得分 0

to   goddie2046(goddie)   :  
  "\r"如何发送到System.in中?Top

10 楼greathawker()回复于 2006-08-04 14:31:05 得分 5

 
  可不可以触发一个键盘事件?Top

11 楼oranjes_snjp(橘子)回复于 2006-08-04 16:17:49 得分 0

to   greathawker()   :  
  你是说用robot对象?Top

12 楼f_acme(沧海一声笑)回复于 2006-08-04 16:20:29 得分 11

package   fun;  
   
  import   java.util.Scanner;  
   
  public   class   Test   extends   Thread   {  
  private   Scanner   cin   =   new   Scanner(System.in);  
   
  public   String   str   =   null;  
   
  public   static   void   main(String[]   args)   {  
  Test   t   =   new   Test();  
  System.out.println("start");  
  t.start();  
  long   t1   =   System.currentTimeMillis();  
  while   (t.str   ==   null   &&   System.currentTimeMillis()   -   t1   <   10000)   {  
   
  }  
  if   (t.str   !=   null)   {  
  System.out.println("you   pressed:"   +   t.str);  
  }  
  try   {  
  t.interrupt();  
  }   catch   (Exception   e)   {  
  //   TODO   Auto-generated   catch   block  
  e.printStackTrace();  
  }  
  System.out.println("end");  
   
  }  
   
  public   void   run()   {  
  str   =   cin.next();  
  }  
  }  
   
  还差一点的就是要强制结束线程,我本想在interrupt()的地方把线程t给kill掉,可是好像没有可以kill的函数,用destroy可以编译过,可是运行时居然NoSuchMethodException,如果能够把线程t给kill掉的话,就应该可以了.Top

13 楼oranjes_snjp(橘子)回复于 2006-08-07 15:21:24 得分 0

to   f_acme(沧海一声笑)   :  
  谢谢,使用interrupt不安全,不能确定这个线程会发生什么  
  另外,为什么大家都喜欢用jdk1.5呢?我觉得1.4.x挺好的,不像过早用1.5,呵呵Top

14 楼oranjes_snjp(橘子)回复于 2006-08-07 15:35:05 得分 0

问题解决了aviliable()是个好方法,线程都可以不用。  
                          long   lTime=System.currentTimeMillis();  
                          boolean   bTimeOverFlag=false;  
                          String   str=null;  
   
                          do  
                          {  
                                  while   (System.in.available()   <   2)  
                                  {  
                                          Thread.sleep(50);  
                                          if   (System.currentTimeMillis()   -   lTime  
                                                  >=   GLOBAL_TIME)  
                                          {  
                                                  bTimeOverFlag   =   true;  
                                                  break;  
                                          }  
                                  }  
                                  if   (!bTimeOverFlag)  
                                  {  
                                          str   =   bufferedReaderIn.readLine();  
                                          ........  
                                  }  
                          }  
                          while   (!bTimeOverFlag);Top

相关问题

关键词

得分解答快速导航

  • 帖主:oranjes_snjp
  • hubo2003hq
  • hbwhwang
  • will123
  • goddie2046
  • greathawker
  • f_acme

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo