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);
你会推荐我什么来实现我的目标?
我想定期重复 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);