程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了停止收听用户输入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决停止收听用户输入?

开发过程中遇到停止收听用户输入的问题如何解决?下面主要结合日常开发的经验,给出你关于停止收听用户输入的解决方法建议,希望对你解决停止收听用户输入有所启发或帮助;

假设我有一个这样的程序:

import java.util.ScAnner;


class State
{
    public volatile static Boolean _userinput = false;
    public volatile static Boolean _timeout = false;
}

public class Startup
{
    public static voID main(String[] args)
    {

        
        class inputListener implements Runnable
        {
            @OverrIDe
            public voID run()
            {
                System.out.println("Listening for user input...");
                ScAnner in = new ScAnner(system.in);
                String s = in.next();
                in.close();
                State._userinput = true;
                System.out.println("User input detected,Listener thread shutTing down...");
            }
        }
        
        class Timeout implements Runnable
        {
            @OverrIDe
            public voID run()
            {
                try 
                {
                    Thread.sleep(2000);
                    State._timeout = true;
                } 
                catch (InterruptedException E) 
                {
                    System.out.println("Timeout thread interrupted");
                }
                
            }
        }
        
        Thread Listener = new Thread(new inputListener());
        Listener.start();
        Thread timeout = new Thread(new Timeout());
        timeout.start();
        
        while(true)
        {
            if(State._userinput)
            {
                System.out.println("Got user input");
                timeout.interrupt();
                break;
            }
            if(State._timeout)
            {
                System.out.println("Timeout");
                Listener.interrupt();
                break;
            }
        }
        System.out.println("ShutTing down...");
    }

}

如您所见,该程序的工作方式如下:启动了两个线程:其中一个在 2 秒后超时,另一个等待用户输入。如果两个线程中的任何一个成功,主线程就会关闭另一个线程并继续前进。这是一个大型项目的简化场景,我基本上等待 a) 用户输入或 b) 外部信号。

Thread.interrupt() 中断超时线程效果很好,即使它不是真正必要的,因为它会......好吧......无论如何都会超时。但是,如果先发生超时,Thread.interrupt不@H_801_17@终止用户输入侦听器线程。这是一个问题,因为即使主线程完成并且程序应该终止,它也不会终止,因为输入侦听器线程仍然在 ScAnner.next() 调用处被阻塞,而 Thread.interrupt() 什么也不做。我现在已经尝试了几件事,似乎是 impossible 摆脱这个线程,而无需用户在控制台内提供至少一行,我想防止这是必要的。有什么办法可以解决这个问题吗?

我正在制作一个控制台应用程序,所以我不能从其他地方获取输入。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的停止收听用户输入全部内容,希望文章能够帮你解决停止收听用户输入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: