java - 计数器监听器直到变量发生变化

标签 java listener

有没有一种方法可以构建监听器来检测日期是否仍然传输到变量,如果是,则执行一项操作,何时不执行其他操作?

例如

直到“int counter1”增加设置 boolean 值(true)或打印或更改另一个int为1

int 计数器(不再增加或减少)设置 boolean 值(假)打印不同的东西,将另一个 int 更改为 2。

基本上,变量改变加或减,做一件事停止改变做另一件事再次开始改变回到做第一件事等等。

有办法做到这一点吗? 没有明显的整个 if 语句的编译方式。

最佳答案

手工制作

最简单的方法是通过 getter 和 setter 访问该变量。您可以将首选逻辑放入 setter 中并从那里跟踪所有突变。

public class Main {

    static int observable = 0;

    static void setObservable(int newValue) {
        if (observable != newValue) {
            System.out.printf("Observable int has been changed from %d to %d.%n", observable, newValue);
            observable = newValue;
        }
    }

    public static void main(String[] args) {

        observable = 1; // Nothing notified us that value has been changed

        setObservable(2); // Console output 'Observable int changed from 1 to 2.'
    }
}

内置解决方案

还有很多其他方法可以实现相同的功能:使用 getter 和 setter 创建实际的 java bean,实现 observable and observer interfaces自行或使用现成的内置解决方案,例如 IntegerProperty:

    IntegerProperty intProperty = new SimpleIntegerProperty();
    intProperty.addListener((observable, oldValue, newValue) -> {

        if (!oldValue.equals(newValue) ) {
            System.out.printf("Value has been changed from %d to %d!%n", oldValue.intValue(), newValue.intValue());
        }
    });

    intProperty.setValue(1); // Output: Value has been changed from 0 to 1!
    intProperty.setValue(2); // Output: Value has been changed from 1 to 2!
    intProperty.setValue(2); // No output

    System.out.println(intProperty.intValue()); // Output: 2

停止改变

至于“停止改变”监听器,这是一个更复杂的问题。根据具体情况,我能想到几种可能的解决方案:
1) 如果您的循环是可预测的并由您决定,只需根据需要手动编写逻辑

/* listening for changes up there  */

System.out.println("I'll go get some coffee");
Thread.sleep(60000); // stopped changing, eh?

/* do your stuff */

/* Continue listening for changes below  */

2) 如果你的循环是不可预测的,但由你设计,你可以尝试让它更可预测一点,设计一组要遵循的规则和协议(protocol),例如,如果新值恰好为零,系统将暂停并切换到另一个任务
3)您还可以运行后台任务,该任务将定期检查上次更新时间,以确定系统是否空闲

有很多可能的解决方案可供建议,但在不了解更多细节的情况下,我无法提出更具体的解决方案

关于java - 计数器监听器直到变量发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698364/

相关文章:

java - 当使用.jsp的view spring mvc,并传递ModelAndView时,如何输出模型?

java - 访问AppWidget中的字符串资源?

javascript - 删除事件监听器时遇到问题

c# - 关闭最后一个连接后,如何通过套接字监听传入连接?

javascript - 在传单中创建一个圆圈而不重新加载 WebView

java - 使用 selenium 处理弹出窗口

java - 是否需要同步对线程安全函数的调用?

android - 毕加索图书馆,Android : Using Error Listener

android - 按钮监听器和 SimpleCursor 适配器

java - 在具有操作和鼠标监听器的 GUI 中,未为 JTable 触发 MouseClicked