在应用程序中从start()更改成员值并保存对ui组件的引用

xeufq47z  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(260)

我有以下自定义应用程序类实现。但是,我不明白为什么 isVisible 不会改变。我试图将字段类型更改为 SimpleBooleanProperty . 然而,这并没有帮助。另外,我应该稍后访问ui,所以我想保存对它们的引用,但是,该值也没有设置。我尝试在start()方法中初始化ui组件,但是,在初始化之后,如果看到我的字段,它将为null。

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}")
    }
}
kxkpmulp

kxkpmulp1#

问题是创建testapplication类的示例两次。 Application.launch() 创建新示例,但不获取现有示例。
解决方案可以是在testapplication类上使用singleton模式。

相关问题