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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

    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掉的话,就应该可以了.
      

  7.   

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

  8.   

    问题解决了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);