Java 在用户输入后的任意点停止?
我需要编写一个自动运行的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”。
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
}
}