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