[英]How can I run my java program in a timed loop?
我正在尝试让我的程序每5分钟运行一次。 谁能告诉我如何实现这一目标? 我对java还是很陌生,这是到目前为止的内容。 这是一个将进程打印到文本文件,然后调用该文本文件以显示其数据的程序。 最好每5分钟运行一次。
import java.io.*;
import java.util.StringTokenizer;
public class getProcesses
{
private String GetProcessListData()
{
Process p;
Runtime runTime;
String process = null;
try {
System.out.println("Allow me to hack your system and see what you have open...");
//This will let us access windows in order to make this program possible
runTime = Runtime.getRuntime();
p = runTime.exec("tasklist");
InputStream inputStream = p.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = bufferedReader.readLine();
process = "&";
while (line != null) {
line = bufferedReader.readLine();
process += line + "&";
}
//As we learned in class, we have to close whatever we open
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
//The following output is a quote from Portal
System.out.println("System has been modified. Thankyou and Goodbye.");
} catch (IOException e) {
System.out.println("Uh oh, looks like we found an IOE");
e.printStackTrace();
}
return process;
}
private void showProcessData()
{
try {
String proc = GetProcessListData();
OutputStreamWriter outputStreamWriter =
new OutputStreamWriter(new FileOutputStream("ProcessList.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
StringTokenizer st = new StringTokenizer(proc, "&");
while (st.hasMoreTokens()) {
bufferedWriter.write(st.nextToken());
bufferedWriter.newLine();
}
//This will close the outputStreams
bufferedWriter.close();
outputStreamWriter.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException
{
getProcesses gpl = new getProcesses();
gpl.showProcessData();
BufferedReader in = new BufferedReader(new FileReader("ProcessList.txt"));
String line;
while((line = in.readLine()) != null)
{
System.out.println(line);
}
}
}
任何帮助表示赞赏,谢谢。
您应该设置一个计划任务(Windows)或cron作业(unix)以每五分钟启动一次命令“ java -jar myprogram.jar”。
较简单的方法是使您的类实现Callable(或Runnable,如果您不希望它返回任何东西),然后使用SchedulerExecutorService运行它。
call()方法应包含将要执行的代码,并且鉴于该方法不允许任何参数,因此应在构造函数中提供它们。
Runnable yourInstance = new YourClass(param1, param2); // Assuming you don't want to return anything.
ScheduledExecutorService scheduledExecutor = Executors
.newSingleThreadScheduledExecutor();
scheduledExecutor.scheduleAtFixedRate(yourClassInstance, 0, 10000,
TimeUnit.MILLISECONDS);
如果您正在运行Linux,则可以使用cron作业调度程序来调度程序的重复调用。 对于其他OS,也存在类似的调度程序。 我认为在这种情况下,无需在程序中实现睡眠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.