我想检查一个值是否保留其值并对onChange采取特定操作。我必须经常检查值是否已更改,因此我需要将其作为单独的Runnable
上的新Thread
。(如果不是这样,请告诉我)但我无法检查对于子类(内部类)中的值,因为我需要将值声明为final
。但重点是不要让变量为final
。数据类型为int
while (true) {
//check whether value has changed
}
使用
new Thread(new Runnable() {
@Override
public void run() {
if(valueHasChanged()){//valueHasChanged will require the variable to be final
yes();
}
}).start();
上面的代码已经过清理,以删除不必要的内容。
答案 0 :(得分:2)
最好使用具有有限数量项目的排队模型,例如1024.这是因为值更改率可能与yes()
方法的执行率不同。排队模型更简单,如果需要,可以在将来扩展/调整。
代码看起来像这样,为了便于阅读,我省略了InterruptedException
catch块:
private final BlockingQueue<Boolean> queue = new LinkedBlockingQueue<>(1024);
while (true) {
.....
//check whether value has changed and do
queue.put(true);
.....
}
....
....
new Thread(new Runnable() {
@Override
public void run() {
while(queue.take()){
yes();
}
}
}).start();
答案 1 :(得分:0)
考虑使用javafx.beans.property.SimpleIntegerProperty
。运行这个简单的测试,看看如何:
public static void main(String[] args) {
SimpleIntegerProperty monitorValue = new SimpleIntegerProperty();
monitorValue.set(4);
monitorValue.addListener((obs, oldValue, newValue ) ->{
System.out.println(oldValue+ " changed to "+ newValue);
});
monitorValue.set(5);
}
输出
4改为5