用Java输入而不挂起程序?
我只是想知道如何让我的java程序继续运行,但始终准备好接受输入用Java输入而不挂起程序?,java,input,continuous,Java,Input,Continuous,我只是想知道如何让我的java程序继续运行,但始终准备好接受输入 现在我正在使用一个bufferreader并在一行中读取,但这会使我的程序停止并等待输入。我希望程序继续运行,但随时准备在需要时接受输入,有没有办法做到这一点?我希望您必须研究应用程序的多线程处理,以使其按您的意愿工作 编辑:当然,虽然此功能可以通过纯CLI界面实现,但您最好还是探索其他选项(即GUI选项)如果你想让一个完整的响应/事件驱动系统以多线程方式运行。我认为你的程序将不得不偶尔轮询用户输入。给它一个漂亮的多线程GUI,而
现在我正在使用一个bufferreader并在一行中读取,但这会使我的程序停止并等待输入。我希望程序继续运行,但随时准备在需要时接受输入,有没有办法做到这一点?我希望您必须研究应用程序的多线程处理,以使其按您的意愿工作
编辑:当然,虽然此功能可以通过纯CLI界面实现,但您最好还是探索其他选项(即GUI选项)如果你想让一个完整的响应/事件驱动系统以多线程方式运行。我认为你的程序将不得不偶尔轮询用户输入。给它一个漂亮的多线程GUI,而不是CLI:)我同意James的观点,另一种选择是“假装”连续运行程序。这并不适用于所有场景,但您可以在显示用户输入之前设置计时器,然后在用户输入内容时再次计算停止和“启动”之间的时间 使用该时间执行一定次数的重复功能。这只有在计时器本身已经有了一些东西的情况下才有用,比如每隔几秒钟就有一个不断消耗的整数 例如: 您向用户提问,但只想给他们5秒钟的时间回答。当用户回答(点击enter)时,程序将计算他们输入所用的时间,如果太长,抛出一条消息,如果在时间限制下抛出另一条消息
我之所以建议使用这种方法,是因为您真正想要了解的线程技术非常先进。下面是一个多线程命令行界面应用程序如何工作的快速示例。这不需要对输入进行轮询,也不需要GUI界面来在后台执行任务,同时在控制台中等待用户的输入 在本例中,一个
线程正在后台运行,可以告诉它在指定的秒数后输出问候语
public class CommandLineMultiThread
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
// Makes and runs the background thread.
MyThread myThread = new MyThread();
Thread t = new Thread(myThread);
t.start();
// Get the number of seconds to wait from the console.
// Exit when "0" is entered.
int waitDuration;
do
{
waitDuration = s.nextInt();
myThread.setGreetIn(waitDuration);
} while (waitDuration != 0);
myThread.quit();
}
static class MyThread implements Runnable
{
boolean running = true; // Boolean to keep thread alive.
long greetingTime = Long.MAX_VALUE; // Time to greet at.
public void setGreetIn(int i)
{
greetingTime = System.currentTimeMillis() + (i * 1000);
}
public void quit()
{
running = false;
}
public void run()
{
while (running)
{
if (System.currentTimeMillis() > greetingTime)
{
System.out.println("Hello!");
greetingTime = Long.MAX_VALUE;
}
try
{
Thread.sleep(100);
}
catch (InterruptedException e) {}
}
}
}
}
通过路由来自对象的输入,该类可用于从命令行界面接受用户输入
然后,当后台线程myThread
运行时,主线程正在等待通过方法从System.in
输入。一旦等待的秒数被接受,后台线程就会被告知等待到某个时间,并且一旦该时间到达,问候语Hello代码>被输出到控制台。我发现线程有点复杂,但不要因此而气馁,它肯定很复杂。如果需要的话,请尝试一下其他方法。有关CLI接口的评论对我来说似乎是一种误导。完全可能有一个带有“CLI界面”的程序,该程序能够在处理用户输入的同时仍在后台执行其他操作。以“top”程序为例,劳伦斯,你说得很对,但是,我已经假设(并将在我上面的帖子中通过编辑澄清)用户的目标是通过问题的措辞建立一个更为事件驱动的响应系统。我将更新我的“编辑”。