Runnable

时间:2016-10-31 15:57:41

标签: java swing jframe eclipse-neon

你建议我实现我的目标是什么? 我想在常规的intervall中重复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);

EDIT3:

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);

1 个答案:

答案 0 :(得分:2)

我会说Timer可能很适合你的需求。使用例如public void schedule(TimerTask task, long delay),您可以设置一个在几毫秒后执行任务的计时器。所以在你的情况下是300000毫秒(5分钟)和TimerTask

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