在命令行Java程序运行时向其发送命令

在命令行Java程序运行时向其发送命令,java,command-line,user-input,Java,Command Line,User Input,我有一个处理大量XML文件的Java程序。这个过程需要几个小时才能运行,有时我需要停止。现在,我使用CTRL-C杀死它,记下它在处理哪个文件,然后删除这些文件的数据并重新处理它们 有没有一种方法可以让Java在命令行上等待用户输入的同时继续工作,而且我可以让它在侦听时继续向命令提示符输出日志信息 我考虑过让它在文件之间等待用户输入几秒钟,但这会给整个处理增加更多的时间,而且我不确定是否有一种方法可以轻松地超时用户输入。您有兴趣生成另一个线程以供XML处理器运行。查看java.util.concu

我有一个处理大量XML文件的Java程序。这个过程需要几个小时才能运行,有时我需要停止。现在,我使用CTRL-C杀死它,记下它在处理哪个文件,然后删除这些文件的数据并重新处理它们

有没有一种方法可以让Java在命令行上等待用户输入的同时继续工作,而且我可以让它在侦听时继续向命令提示符输出日志信息


我考虑过让它在文件之间等待用户输入几秒钟,但这会给整个处理增加更多的时间,而且我不确定是否有一种方法可以轻松地超时用户输入。

您有兴趣生成另一个线程以供XML处理器运行。查看
java.util.concurrent

主线程可以处理用户输入,而另一个线程可以向控制台报告。处理两者之间的任何并发问题都可能很困难,最好尽量避免在两者之间进行通信,以免让自己头疼

您最终将添加类似以下内容的代码

Thread xmlProcessorThread = new Thread(yourRunnableXMLProcessor);
xmlProcessorThread.run();

并将
runnable
接口添加到XML处理器中(因此命名为
YourRunnablemlProcessor

您有兴趣生成另一个线程供XML处理器运行。查看
java.util.concurrent

主线程可以处理用户输入,而另一个线程可以向控制台报告。处理两者之间的任何并发问题都可能很困难,最好尽量避免在两者之间进行通信,以免让自己头疼

您最终将添加类似以下内容的代码

Thread xmlProcessorThread = new Thread(yourRunnableXMLProcessor);
xmlProcessorThread.run();

并将
runnable
接口添加到XML处理器(因此命名为
YourRunnablemlProcessor

在命令行应用程序中启动一个新线程,该线程实际执行处理文件的工作。处理线程可以在每个文件之后检查内部标志,并确定是否继续。主应用程序线程将继续侦听命令行输入,并可以根据接收输入的时间设置标志的值。

在命令行应用程序中,启动一个新线程,实际执行文件处理工作。处理线程可以在每个文件之后检查内部标志,并确定是否继续。主应用程序线程将继续侦听命令行输入,并可以根据接收输入的时间设置标志的值。

您应该看到:您应该看到:像jboss和hadoop这样的大型项目就是这样做的吗?也就是说,它们在后台运行大型进程,但有一个可以连接的命令行shell界面。它们的工作方式类似。是的,但如果说它们按照我建议的方式工作,可能过于简单了。通常,在这两者之间会传递一些信息,这是如何在问题本身中处理的。可能会给你一些额外的背景。同样,java.util.concurrent库将为您提供所需的工具。像jboss和hadoop这样的大型项目就是这样做的吗?也就是说,它们在后台运行大型进程,但有一个可以连接的命令行shell界面。它们的工作方式类似。是的,但如果说它们按照我建议的方式工作,可能过于简单了。通常,在这两者之间会传递一些信息,这是如何在问题本身中处理的。可能会给你一些额外的背景。同样,
java.util.concurrent
库将为您提供所需的工具。