我有一个要绑定到标签的外部文本文件,以便在修改外部文件值时,我的UI会自动更新字符串值。
到目前为止,我已经尝试过:
val testid: ObservableStringValue = SimpleStringProperty(File("src/.../test").readText())
在我的边框中,我引用了睾丸
label.bind(testid)
这将成功读取文件,但是当我编辑测试文件时,testid不会自动更新其值。我想尝试使用Handler()强制变量每秒更新一次值,但是我敢肯定有一种更聪明的方法可以使用Properties和.observable()将文件和Property绑定在一起。
编辑:
根据mipa的建议使用nio2,我在为计时器生成对象/类时遇到了麻烦:
object DirectoryWatcher {
@JvmStatic fun main(args:Array<String>) {
val watchService = FileSystems.getDefault().newWatchService()
val path = Paths.get(System.getProperty("src/pykotinterface/test"))
path.register(
watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY)
val key:WatchKey = watchService.take()
while (key != null) {
for (event in key.pollEvents()) {
println(
"Event kind:" + event.kind()
+ ". File affected: " + event.context() + ".")
}
key.reset()
}
}
}
如何调用此对象以运行-它当前位于View()类中,TornadoFX正在调用该类以生成视图,因此无法调用DirectWatcher.main()。我是否可以从其他App类中对此对象进行调用?我很迷茫。
答案 0 :(得分:2)
JavaFX中没有允许这种绑定的内置机制,但是您可以按照以下说明使用Java监视服务: http://www.baeldung.com/java-nio2-watchservice 可以在以下位置找到Oracle文档: https://docs.oracle.com/javase/10/docs/api/java/nio/file/WatchService.html