键盘输入时,如何定时。
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




