java - 如何在 Java 中创建自定义事件处理程序?
问题描述
在过去的几天里,我一直在试图弄清楚如何在 Java 中创建自己的事件。我希望能够像这样使用它:
public class main {
public void onTimeChange(MinuteChangeEvent event) {
//do whatever when MinuteChangeEvent fires
}
}
基本上,只要触发,onTimeChange
就会执行该方法。MinuteChangeEvent
但是我将如何创建该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;
}
}
}
推荐阅读
- angular - HTTP 401 上的角度重定向
- java - 如何在java中将最后一位数字0更改为1?
- python - 如果元素满足条件,则在与其旁边的数组对应的数组中打印 str
- python - 代码仅在 IDLE 上抛出 FileNotFoundException 而不是通过 CMD
- android - java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.TextView
- ios - Navigation controller inside tab bar controller (like WhatsApp or FB Messenger)
- xpath - xPath:您可以仅选择具有特定数量的特定子节点的节点吗?
- android - 在 Android 中使用“ulaw”编码生成 .wav 音频文件
- java - 非线程安全类
- flutter - 如何覆盖 Flutter TabBar 选项卡以用作 FloatingActionButton?