使用JavaFX8,如果ObjectProperty的一个属性发生更改,但引用保持不变,那么如何能够得到通知?
下面是使用ObjectProperty的具体示例
public abstract class EntityController {
protected ObjectProperty<KeyStore> trustStore = new SimpleObjectProperty<KeyStore>();
public EntityController() {
}
public KeyStore getTrustStore() {
return this.trustStore.getValue();
}
public void setTrustStore(KeyStore trustStore) {
this.trustStore.set(trustStore);
}
public ObjectProperty<KeyStore> trustStoreProperty() {
return this.trustStore;
}
}
public class CertificatesTabPresenter extends PKIPresenter implements Initializable {
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
this.getEntityController().trustStoreProperty().addListener((observableVal, oldTrustStore, newTrustStore) -> {
trustStoreChanged(oldTrustStore, newTrustStore);
});
}
@FXML
private void addTrustStore(MouseEvent e) {
File keyStoreFile = selectKeyStoreFile();
if (keyStoreFile != null) {
Optional<String> keyStoreType = selectKeyStoreType();
if(keyStoreType.isPresent()) {
Optional<char[]> password = insertPassword();
if(password.isPresent()) {
try {
KeyStore trustStore = KeyStore.getInstance(keyStoreType.get());
trustStore.load(null, null);
FileInputStream fis = new FileInputStream(keyStoreFile);
trustStore.load(fis, password.get());
//This causes the changeListener to be notified because the reference changed
this.getEntityController().setTrustStore(trustStore);
//The changeListener won't be notified, because only the KeyStore changes internally but the reference stays the same
trustStore.deleteEntry(trustStore.aliases().nextElement());
this.getEntityController().setTrustStore(trustStore);
//This also won't notify the changeListener
String a = this.getEntityController().getTrustStore().aliases().nextElement();
this.getEntityController().getTrustStore().deleteEntry(a);
} catch (KeyStoreException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (CertificateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
//TODO: password was wrong -> show error message
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
}
相关代码是第一次设置ObjectProperty
的值并随后删除一个元素的位置。change eListener仅在设置ObjectProperty
的值时收到通知,但在值更改时不会收到通知。
我的问题是:即使引用的对象没有更改,如果密钥库得到更新,我如何获得通知?JavaFX中是否有内置方式?
我的目的是在changeListener中每次向密钥库添加或删除证书时,在列表视图中显示所有包含的证书和密钥,并更新列表视图。也许我完全走错了路,我应该做完全不同的事?
其他信息:
this.getEntityController()
返回本身保存在ObjectProperty中的EntityController的实例
我不知道有什么更好的方法来处理这个限制,所以我要做的就是对修改后的对象执行set(),这样引用保持不变,但更改会传播。
我按照设置TwitterSource和HDFS汇的链接。 用于启动代理的命令: 我成功地做到了这一点,但现在有一个问题。在停止flume代理之前,输出不会被写入。一旦我杀了我的水槽代理,它就会被写到HDFS。 我有两个问题: 1)如何停止水槽剂 - 除了做CTRL C之外,还有其他方法吗? 2)我能让flume-agent在移动中向HDFS写信,而不必杀死代理吗? 注意:终止进程后,写入的文件。t
当bean是POJO时,Weld说“对类型Foo的不满意的依赖关系”是什么意思,但是,只要我在顶部添加< code>@Dependent,一切都工作正常?我记得以前不用指定作用域也能很好的工作。我想我打碎了什么东西。 说明书上说: 托管 Bean 由 Java 类实现,该类称为其 Bean 类。如果顶级 Java 类被任何其他 Java EE 技术规范(如 Java 服务器人脸技术规范)定义为受管
问题内容: 这是我的配置: 根据此处找到的logback文档(http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy),文件将根据我的fileNamePattern 每分钟翻转一次。 我观察了它是如何工作的,这是我的发现: 它不会在很短的时间内创建日志文件。 当新日志到达时,它只会为前一分钟创建一个日志文件。(例如,我在
正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。 我的应用程序配置: 有一个作业和一个触发器与之相关: 调度程序将启动,作业和触发器将正确添加
问题内容: 好的,所以我有一个监视线程,该线程检查ArrayList的大小,并在该大小大于某个数字之后执行一些操作。我现在遇到的问题是,除非我的循环中有打印语句,否则大小值永远不会更新。这是一些代码来显示我到底要做什么。 上面的代码不起作用。它永远不会进入if语句。但是,这很好用: 编辑:getSize()代码: 注意:我有另一个正在运行的线程正在更新并添加到我的t类中的列表中。 有什么帮助吗?当
我对可缓存批注的条件有问题。 从文档中,我了解到除非条件在被注释的方法被调用后得到验证,并且只有在不满足除非条件的情况下,方法返回的值才会被缓存(并实际返回)。否则,应返回缓存的值。 首先,这个假设是否正确? 编辑: [来自Spring文档]顾名思义,@Cacheable用于划分可缓存的方法-即,将结果存储到缓存中的方法,因此在后续调用(使用相同的参数)时,缓存中的值将返回,而不必实际执行该方法。