在过去的几天里,我一直在试图弄清楚如何在Java中创建自己的事件。我希望能够像这样使用它:
public class main {
public void onTimeChange(MinuteChangeEvent event) {
//do whatever when MinuteChangeEvent fires
}
}
基本上,只要MinuteChangeEvent
触发,方法onTimeChange
就会被执行。但我该如何创建MinuteChangeEvent
事件,以及我该如何告诉它何时开火?
为此,我还需要让我的类始终运行。我该怎么做呢?因为通常情况下,它只执行一次,仅此而已。如果一切正常,应该发生的是:无论onTimeChange
方法内部是什么,每分钟都会执行一次,这是MinuteChangeEvent
发生的时候,并且类应该一直运行直到手动停止。
我还没有找到任何关于如何创建这样的自定义侦听器的内容,所以任何帮助都将是感激的。
我不确定是否正确理解了你的问题。无论如何,我发送一个片段。就像user79161在他的评论中提到的,请在问题中添加更多细节。
public class TestClass{
public static void main(String args[]) {
MinuteChangeEvent event = new MinuteChangeEvent();
try {
event.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void onTimeChange(MinuteChangeEvent event){
System.out.println(String.format("Event fired %s time(s)",
event.getCounter()));
if(event.getCounter() >= 5){
event.setStopped(true);
}
}
static class MinuteChangeEvent implements Runnable{
private int counter = 0;
private ScheduledExecutorService executorService;
private boolean stopped = false;
@Override
public void run() {
counter++;
if(!stopped)
onTimeChange(this);
else
stop();
}
void start() throws Exception{
executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(this, 0, 1, TimeUnit.MINUTES);
}
private void stop(){
if (executorService != null)
executorService.shutdown();
}
int getCounter(){
return counter;
}
public void setStopped(boolean stopped) {
this.stopped = stopped;
}
public boolean isStopped() {
return stopped;
}
}
}