日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 不可最小化,java – 这是最小化绑定失效的有效方法吗?

發(fā)布時間:2023/11/27 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 不可最小化,java – 这是最小化绑定失效的有效方法吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我有一些復雜的Observable結構,這可能是也可能不是壞主意,但這不是這個問題的焦點.

這些結構的問題在于它們會產(chǎn)生很多UI顯示的Observable對象的失效.就像我所知道的那樣,當JavaFX UI顯示某些內(nèi)容時,它在其上注冊了ChangeListener,因此任何使用延遲評估的嘗試都會消失.也就是說,使observable無效似乎告訴UI它可能已經(jīng)改變,這會導致UI立即請求它的值,迫使它立即進行評估.

所以,我想通過Platform.runLater()推遲失效.

我創(chuàng)建了一個名為DeferredBinding的類,它將所有內(nèi)容委托給一個包裝的Binding,但invalidate()方法除外,它將延遲到稍后要處理的JavaFX UI線程.它似乎工作……我可以無效一百次,它似乎只是實際處理失效一次.

但是,我之前沒有見過這種模式,我擔心它可能會屬于“不錯但嘗試不好”的范疇.

所以,問題:這是一個壞主意嗎?我特別關注引入依賴于DeferredBinding的其他Observable對象的錯誤.一旦Platform.runLater()發(fā)生,它們會好嗎?

package com.subaru.SAM.model.datastructures;

import java.util.concurrent.atomic.AtomicBoolean;

import java.util.logging.Logger;

import javafx.application.Platform;

import javafx.beans.InvalidationListener;

import javafx.beans.binding.Binding;

import javafx.beans.value.ChangeListener;

import javafx.collections.ObservableList;

/**

* Specialized binding that defers its invalidations to the JavaFX UI thread in a throttled manner. The idea being that, if invalidate() is called many times,

* it only basically happens once (when the UI thread gets to it).

*/

public class DeferredBinding implements Binding {

private static final Logger logger = Logger.getLogger(DeferredBinding.class.getName());

private final Binding binding;

private final AtomicBoolean pendingInvalidation = new AtomicBoolean(false);

public DeferredBinding(Binding binding) {

this.binding = binding;

}

@Override

public void addListener(ChangeListener super T> listener) {

binding.addListener(listener);

}

@Override

public void removeListener(ChangeListener super T> listener) {

binding.removeListener(listener);

}

@Override

public T getValue() {

return binding.getValue();

}

@Override

public void addListener(InvalidationListener listener) {

binding.addListener(listener);

}

@Override

public void removeListener(InvalidationListener listener) {

binding.removeListener(listener);

}

@Override

public boolean isValid() {

return binding.isValid();

}

/**

* Override logic for invalidate() method to defer invalidation to runLater. Throttle the invalidations so as not to floor the JavaFX UI thread with

* multiple calls

*/

@Override

public void invalidate() {

if (pendingInvalidation.getAndSet(true) == false) {

Platform.runLater(() -> {

// Signal that the UI is processing the pending invalidation, so any additional invalidations must schedule another update.

pendingInvalidation.set(false);

binding.invalidate();

});

}

}

@Override

public ObservableList> getDependencies() {

return binding.getDependencies();

}

@Override

public void dispose() {

binding.dispose();

}

}

總結

以上是生活随笔為你收集整理的java 不可最小化,java – 这是最小化绑定失效的有效方法吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:java 不可最小化,java – 这是最小化绑定失效的有