Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 清除扫描仪(in)_Java_Multithreading_Java.util.scanner_System.in - Fatal编程技术网

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()吗?

这似乎是一种使用
线程中断
的有效场合。处理成功后,执行
停止检查程序。中断
-这将使
扫描仪失败。下一步
执行
关闭中断异常
异常。请注意,根据javadoc
System.in
,可能会因为此操作而关闭


如果这不是一个选项,唯一的解决方案是不要使用
扫描仪
,并以非阻塞方式进行选项读取。

这似乎是一种使用
线程.中断
的情况。处理成功后,执行
停止检查程序。中断
-这将使
扫描仪失败。下一步
执行
关闭中断异常
异常。请注意,根据javadoc
System.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.is
stop
volatile?stop是“公共静态布尔值”也许这个关于sincronizity的问题可以帮助你:看起来像是Ok:D的复制品。只是看起来有点滑稽:P。是的,我试过了,但它还在等待。我用@jaime的评论来解决这个问题Rey@Lele如果您打算稍后读取更多用户输入,则不应关闭扫描仪。是的,我尝试过,但它仍在等待。我用@jaime的评论来解决这个问题Rey@Lele如果以后要读取更多用户输入,则不应关闭该扫描仪。
scanner.hasNext()
始终适用于从
系统读取的扫描仪。在
中,该流未关闭。但一旦线程停止,我将关闭while循环外的流“一旦线程停止”,如果线程停留在
while
lopp中,什么时候会发生这种情况?由于关闭了扫描仪,以后也无法读取更多用户数据。
scanner.hasNext()
始终适用于扫描仪从
系统中读取。在
中,该流未关闭。但我在while循环外部关闭流,一旦线程停止“一旦线程停止”“如果线程停留在
lopp中,那么什么时候会发生这种情况?由于您要关闭扫描仪,因此以后也无法读取更多用户数据。