[英]Scheduling an Applet start with ScheduledExecutorService
I have a simple Clock Applet that I would like to be able to control via the ScheduledExecutorService, however I'm a little unsure as to how to make the thread start with the ScheduledExecutorService.schedule command.我有一个简单的时钟小程序,我希望能够通过 ScheduledExecutorService 进行控制,但是我有点不确定如何使用 ScheduledExecutorService.schedule 命令启动线程。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class UpdateApplet extends java.applet.Applet implements Runnable
{
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Thread thread;
boolean running;
int updateInterval = 1000;
final Runnable clock = new Runnable(){//Can't take credit for this, thnx KH
public void run(){
while(true)
repaint();
}
};
public void run( ){
scheduler.schedule(clock, 10, TimeUnit.SECONDS);//edited this here
}
public void start( ){
System.out.println("starting...");
if ( !running) //naive approach
{
running = true;
thread = new Thread(this);
thread.start( );
}
}
public void stop( ){
System.out.println("stopping...");
thread.interrupt( );
running = false;
}
}
public class Clock extends UpdateApplet{
public void paint(java.awt.Graphics g){
g.drawString(new java.util.Date( ).toString( ), 10, 25);
}
}
I'm sure its a simple fix, but I just don't see it.我确信它是一个简单的修复,但我只是没有看到它。 Any help will be greatly appreciated.
任何帮助将不胜感激。
You need to use scheduleAtFixedRate .您需要使用scheduleAtFixedRate 。 As well, you don't need to use a thread within the run method,
同样,您不需要在 run 方法中使用线程,
class UpdateApplet() implements Runnable {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
volatile boolean running;
int updateInterval = 1000;
public void start() {
scheduler.schedule(this, updateInterval, updateInterval, TimeUnit.MILLISECONDS);
}
public void run() {
if(!running) {
scheduler.shutdown();
}
else {
repaint();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.