Java 清除扫描仪(in)
在我的代码中,我有一个很长的顺序操作循环。 我制作了一个线程来手动停止这个循环。 基本上Java 清除扫描仪(in),java,multithreading,java.util.scanner,system.in,Java,Multithreading,Java.util.scanner,System.in,在我的代码中,我有一个很长的顺序操作循环。 我制作了一个线程来手动停止这个循环。 基本上 private static void sendAndCheck() throws InterruptedException { stop = false; StopChecker r = new StopChecker(); Thread t = new Thread( r ); if ( vettore != null ) {
private static void sendAndCheck() throws InterruptedException {
stop = false;
StopChecker r = new StopChecker();
Thread t = new Thread( r );
if ( vettore != null ) {
t.start();
for ( int i = 0; i < vettore.length; i++ ) {
do {
if ( stop == true ) {
break;
}
//Do something for a lot of time.. (code deleted)
} while ( !status.equalsIgnoreCase( "PROCESSED" ) ); //<- normal exit
}
//Stop the thread
stop = true;
}
}
问题是,如果循环正常退出,线程将锁定在scanner.next上,因此,下一个输入将丢失在仍然处于死区的线程中。
如何从主类中释放scanner.next?
我已尝试使用scan.close()但不起作用
还有另一种方法可以停止循环,而不杀死应用程序吗?我尝试使用keyListener,但我有一个空指针您尝试过scan.close()或scanner.close()吗?您尝试过scan.close()或scanner.close()吗?这似乎是一种使用
线程中断
的有效场合。处理成功后,执行停止检查程序。中断
-这将使扫描仪失败。下一步
执行关闭中断异常
异常。请注意,根据javadocSystem.in
,可能会因为此操作而关闭
如果这不是一个选项,唯一的解决方案是不要使用
扫描仪
,并以非阻塞方式进行选项读取。这似乎是一种使用线程.中断
的情况。处理成功后,执行停止检查程序。中断
-这将使扫描仪失败。下一步
执行关闭中断异常
异常。请注意,根据javadocSystem.in
,可能会因为此操作而关闭
如果这不是一个选项,唯一的解决方案是不要使用
扫描仪
,并以非阻塞方式进行选项读取。请按以下方式更改代码
1) 将while循环替换为do-while块
2) 按如下方式更改扫描仪代码
do{
while ( scanner.hasNext() ) {
String command = scanner.nextLine();
System.out.println("line:"+command);
}
} while ( conditionFlag)
当条件为false时,调用
scanner.close();
请按如下方式更改代码 1) 将while循环替换为do-while块 2) 按如下方式更改扫描仪代码
do{
while ( scanner.hasNext() ) {
String command = scanner.nextLine();
System.out.println("line:"+command);
}
} while ( conditionFlag)
当条件为false时,调用
scanner.close();
是
stop
volatile
?stop是“公共静态布尔值”也许这个带有sincronizity的问题可以帮助你:看起来像Ok:D的副本。它看起来有点滑稽:P.isstop
volatile?stop是“公共静态布尔值”也许这个关于sincronizity的问题可以帮助你:看起来像是Ok:D的复制品。只是看起来有点滑稽:P。是的,我试过了,但它还在等待。我用@jaime的评论来解决这个问题Rey@Lele如果您打算稍后读取更多用户输入,则不应关闭扫描仪。是的,我尝试过,但它仍在等待。我用@jaime的评论来解决这个问题Rey@Lele如果以后要读取更多用户输入,则不应关闭该扫描仪。scanner.hasNext()
始终适用于从系统读取的扫描仪。在
中,该流未关闭。但一旦线程停止,我将关闭while循环外的流“一旦线程停止”,如果线程停留在while
lopp中,什么时候会发生这种情况?由于关闭了扫描仪,以后也无法读取更多用户数据。scanner.hasNext()
始终适用于扫描仪从系统中读取。在
中,该流未关闭。但我在while循环外部关闭流,一旦线程停止“一旦线程停止”“如果线程停留在而lopp中,那么什么时候会发生这种情况?由于您要关闭扫描仪,因此以后也无法读取更多用户数据。