Java 在用户输入后的任意点停止?

Java 在用户输入后的任意点停止?,java,loops,Java,Loops,我需要编写一个自动运行的Java程序,但可以在用户输入时在任何时候停止。 例如: for (int i=0;i<1000000;i++){ System.out.println(i); } for(int i=0;i您可以使用do while循环,在每次迭代中检查输入是否等于“exit”: 你可以通过几种方式来实现这一点。我已经概述了一些方法,这些方法应该涵盖你可能需要的大部分方法 具有两个线程的多线程程序,其中一个用于执行某些任意函数,另一个专用于检测用户是否键入了“exit”。

我需要编写一个自动运行的Java程序,但可以在用户输入时在任何时候停止。 例如:

for (int i=0;i<1000000;i++){
   System.out.println(i);
}

for(int i=0;i您可以使用
do while
循环,在每次迭代中检查输入是否等于
“exit”


你可以通过几种方式来实现这一点。我已经概述了一些方法,这些方法应该涵盖你可能需要的大部分方法

  • 具有两个线程的多线程程序,其中一个用于执行某些任意函数,另一个专用于检测用户是否键入了“exit”。这非常粗糙,用户必须按enter键
  • JFrame,通过以下两种方式之一使用JTextField检测用户输入:
    • 用户在键入“退出”后点击回车键
    • 用户只需键入“退出”
  • 在步骤2中交换JFrame/控制台功能。以某种方式在JFrame中显示任意函数,并在用户在控制台中键入“exit”时将其停止。用户必须按enter键
  • 将控制台设置为原始模式,然后检测用户是否已键入“退出”而无需按enter键。有几种方法可以执行此操作,所有这些方法都涉及外部库。有关您的确切问题和类似问题以及一些不同解决方案的更多信息,请参见:

  • 解决方案1:
    解决方案2和3: 在将解决方案2与解决方案3分开的下面有
    if
    条件。在
    break;
    语句之前的
    if
    语句调用一个方法,该方法检查
    InputFrame
    的属性
    input
    ,只有在用户按下enter键后才会更新。另一个
    if
    语句t调用一个方法,该方法只检查
    JTextField
    中的文本

    import javax.swing.JFrame;
    
    public class JFrameInput
    {
        public static void main(String[] args)
        {
            InputFrame iFrame = new InputFrame();
            iFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            iFrame.pack();
            iFrame.setVisible(true);
    
            for (int i = 0; i < 1000000; i++)
            {
                System.out.println(i);
                if ((iFrame.getInput().equals("exit")))
                //if (iFrame.checkInput("exit"))    //use to exit without pressing enter
                {
                    break;
                }
            }
            //do something after user types exit
        }
    }
    

    您是在寻找具有检测用户输入的功能的东西,还是只是希望在某些任意输入上停止整个程序?这听起来很危险,如果我无法完成“退出”,但在迭代中只能完成“exi”,该怎么办?输入是否重置?如果键入
    “exi”
    然后循环将不会完成。当然,您可以验证输入,以便在输入有效输入之前再次显示。每次
    input=sc.nextLine()时,控制台将等待用户输入遇到;
    语句。用户必须按enter键,因此如果他们键入
    exi
    并按enter键,则这是“他们的错误”,循环将继续。您是否希望在用户不按enter键的情况下检测用户输入?这是您希望仅在控制台中实现的功能,还是使用Swing/Awt可以?
    public class MultithreadedUserInput
    {
        public static void main(String[] args)
        {
            InputDetector detector = new InputDetector();
            detector.start();
    
        for (int i = 0; i < 1000000; i++)
        {
            System.out.println(i);
    
            if (detector.getInput().equals("exit"))
            {
                break;
            }
        }
    
        //do something after user types exit
        }
    }
    
    import java.util.Scanner;
    
    public class InputDetector implements Runnable
    {
        private Thread thread;
        private String input;
        private Scanner scan;
    
        public InputDetector()
        {
            input = "";
            scan = new Scanner(System.in);
        }
    
        public void start()
        {
            thread = new Thread(this);
            thread.start();
        }
    
        @Override
        public void run()
        {
            while (!(input.equals("exit")))
            {
                input = scan.nextLine();
            }
        }
    
        public String getInput()
        {
            return input;
        }
    }
    
    import javax.swing.JFrame;
    
    public class JFrameInput
    {
        public static void main(String[] args)
        {
            InputFrame iFrame = new InputFrame();
            iFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            iFrame.pack();
            iFrame.setVisible(true);
    
            for (int i = 0; i < 1000000; i++)
            {
                System.out.println(i);
                if ((iFrame.getInput().equals("exit")))
                //if (iFrame.checkInput("exit"))    //use to exit without pressing enter
                {
                    break;
                }
            }
            //do something after user types exit
        }
    }
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    
    public class InputFrame extends JFrame
    {
        private String input;
        private JTextField text;
    
        public InputFrame()
        {
            super("Input Frame");
            input = "";
            text = new JTextField("");
            text.setToolTipText("Type 'exit' to stop the program.");
    
            text.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    input = text.getText();
                }
            });
    
            add(text);
            setResizable(false);
        }
    
        public String getInput()
        {
            return input;
        }
    
        public Boolean checkInput(String s)
        {
            if (text.getText().equals(s))
            {
                return true;
            }
            return false; //could use else to make this clearer
        }
    }