在应用程序中从 start() 更改成员值并保存对 ui 个组件的引用
Changing member value from start() in Application and save reference to ui components
我有以下自定义应用程序 class 实现。但是,我不明白为什么 isVisible
的值没有改变。我试图将字段类型更改为 SimpleBooleanProperty
。但是,它没有帮助。另外,我应该稍后访问 ui,所以我想保存对它们的引用,但是,该值也没有设置。我尝试在 start() 方法中初始化我的 ui 组件,但是,之后如果我看到我的字段,它是空的。
import javafx.stage.Stage
import java.util.concurrent.atomic.AtomicBoolean
class TestApplication : Application() {
@Volatile
private var isVisible = AtomicBoolean(false)
override fun start(stage: Stage) {
stage.show()
println("Stage shown ${Thread.currentThread().name}")
isVisible.set(true)
}
fun showUI() {
Thread { launch(TestApplication::class.java) }.start()
println("Waiting until getting visible")
while (isVisible.get().not());
println("isVisible=${isVisible}")
}
}
问题是两次创建 TestApplication class 的实例。 Application.launch()
创建新实例,不获取现有实例。
解决方法是在 TestApplication 上使用单例模式 class。
我有以下自定义应用程序 class 实现。但是,我不明白为什么 isVisible
的值没有改变。我试图将字段类型更改为 SimpleBooleanProperty
。但是,它没有帮助。另外,我应该稍后访问 ui,所以我想保存对它们的引用,但是,该值也没有设置。我尝试在 start() 方法中初始化我的 ui 组件,但是,之后如果我看到我的字段,它是空的。
import javafx.stage.Stage
import java.util.concurrent.atomic.AtomicBoolean
class TestApplication : Application() {
@Volatile
private var isVisible = AtomicBoolean(false)
override fun start(stage: Stage) {
stage.show()
println("Stage shown ${Thread.currentThread().name}")
isVisible.set(true)
}
fun showUI() {
Thread { launch(TestApplication::class.java) }.start()
println("Waiting until getting visible")
while (isVisible.get().not());
println("isVisible=${isVisible}")
}
}
问题是两次创建 TestApplication class 的实例。 Application.launch()
创建新实例,不获取现有实例。
解决方法是在 TestApplication 上使用单例模式 class。