如果是传统做法理论上需要两个Thread,一个是在做循环,一个在接受键盘的i/o,当键盘受到数据的时候,控制循环Thread的终止条件,就可以了。这里需要两个Thread是因为传统的java i/o是block的,所以这样的需求必须用另外一个Thread,否则等待输入的时候循环Thread就Block了。也可以使用NIO,但是我没试过。
具体实现上可以在main里等待用户输入,然后起一个Thread做循环。

解决方案 »

  1.   

    public class Test
    {
    public Test(){} public void aa(){
    PrintThread pt = new PrintThread();
    pt.start();
    try{
    java.io.BufferedReader bf = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    bf.readLine();
    pt.setRunning(false);
    System.out.println("The end!");
    }catch(Exception e){
    }
    } public static void main(String[] args){
    new Test().aa();
    } class PrintThread extends Thread
    {
    private boolean running = true; public PrintThread(){
    } public void setRunning(boolean v){
    running = v;
    } public void run(){
    try{
    int i = 0;
    while(running){
    System.out.println("Hello " + i);
    i ++;
    try{
    Thread.sleep(1000);
    }catch(Exception e){
    }
    }
    }catch(Exception e){
    }
    }
    }
    }
      

  2.   

    直到用户按任意键,循环才跳出来,而并非只有Enter
      

  3.   

    satangf(好好学习,天天向上!) 
    你的程序提示以下错误:
    Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Tes
    t)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
    3)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
      

  4.   

    是你自己打错了把,把test打成了Tes