Java 如何停止console.readLine()?
这是我的一些示例代码:Java 如何停止console.readLine()?,java,Java,这是我的一些示例代码: public class test implements Runnable { @Override public void run() { Console console = System.console(); if (console == null) { System.exit(0); } String s = console.readLine(); System.out.println(s); run(
public class test implements Runnable {
@Override
public void run() {
Console console = System.console();
if (console == null) {
System.exit(0);
}
String s = console.readLine();
System.out.println(s);
run();
}
}
我的目标是在几秒钟后停止console.readLine()。您可以围绕要运行几秒钟的代码设置计时器。像这样:
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
// your code here
}
},
5000
);
以下是一个非阻塞标准输入读取器,因此您再也不用担心类似的问题:
public final class NonblockingStandardInputReaderThread
{
private NonblockingStandardInputReaderThread()
{
}
public static void start( Consumer<String> lineConsumer )
{
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(
System.in ) );
Thread backgroundReaderThread = new Thread( new Runnable()
{
@Override
public void run()
{
while( !Thread.interrupted() )
{
try
{
String line = bufferedReader.readLine();
if( line == null )
break;
lineConsumer.invoke( line );
}
catch( IOException e )
{
System.out.println( getClass().getName() + ": " + e );
}
}
}
}, NonblockingStandardInputReaderThread.class.getName() );
backgroundReaderThread.setDaemon( true );
backgroundReaderThread.start();
}
}
您可以让通过标准输入提交的每一行文本在标准输出中得到回响,而不需要任何阻塞。这符合我的要求。虽然迈克·纳基斯的回答也不错。
NonblockingStandardInputReaderThread.start( s -> System.out.println( s ) );