Java Runnable 中重复任务的最佳解决方案

Java best solution for repeated task in Runnable

你会推荐我什么来实现我的目标? 我想定期重复 Robot 东西(按键)。描述也在我的代码中。 我使用 eclipse neon with windowbuilder(java/swing/jframe)。

package patrick;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.sql.Time;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import javax.management.timer.Timer;

public class Background implements Runnable {

    public boolean isRunning = true;
    int intervall = 0;
    Robot r = null;


    public Background(int i)
    {
        this.intervall = i;
    }




    @Override
    public void run() 
    {
        System.out.println("Thread: " + Thread.currentThread().getName() + " gestartet!");
        System.out.println("Intervall i: " + intervall);
        try {
            r = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        while(isRunning)
        {
            //int intervall is given me from my MainWindow Class and represents the minutes (for example I get a 5 which means 5 minutes)
            //now I want to do Robot stuff here that repeats in the given intervall time
        }
    }

    public void stop()
    {
        isRunning = false;
        System.out.println("Thread: " + Thread.currentThread().getName() + " gestoppt!");
    }

}

编辑:

后台从 MainWindow Class 启动,如下所示:

bg = new Background(itmp);
        th1 = new Thread(bg);
        th1.start();

EDIT2:第一个答案

像这样?

timer.scheduleAtFixedRate(
while(isRunning)
        {
            //int intervall is given me from my MainWindow Class and represents the minutes (for example I get a 5 which means 5 minutes)
            //now I want to do Robot stuff here that repeats in the given intervall time
        }
, delay, period);

编辑 3:

timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                while(isRunning)
                {
                    //int intervall is given me from my MainWindow Class and represents the minutes (for example I get a 5 which means 5 minutes)
                    //now I want to do Robot stuff here that repeats in the given intervall time
                }
            }
        }, 0, intervall*6000);

我会说Timer probably suits your needs pretty well. using for example public void schedule(TimerTask task, long delay), you'd be able to set a timer that executes a task after a number of milliseconds. So in your case 300000 milliseconds (5 minutes) and a TimerTask

long delay = 300000L;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        //do something
    }
}, delay);