小编rom*_*man的帖子

为什么将 TextField 绑定到正在另一个线程上更新的属性最终会导致应用程序抛出错误?

我有一个 javafx 应用程序,其中有多个选项卡(计时器、秒表、时钟),每个选项卡都有一个单独的控制器,用户可以使用开始/停止按钮添加和独立启动多个计时器。

我尝试将 TextField 绑定到另一个类 MyTimer 的属性,该属性跟踪经过的时间,但它最终(运行几秒钟后)开始抛出错误。(如果您检查下面的代码,请注意,只有将“Thread.sleep”设置为 10 毫秒时才会发生这种情况-当我将延迟增加到 100 毫秒时,它会继续运行大约一分钟并且没有崩溃-我没有进一步测试,因为我想解决根本原因而不是增加延迟)。

只是让您有一个快速的想法: 应用程序图片

MyTimer 类:

    public class MyTimer implements Startable {

...

    private long startNanoTime, storedElapsedTime, totalTime;
    private TimerStates state;
    private StringProperty timerStringProperty = new SimpleStringProperty(DEFAULT_TIMER_STRING_VALUE); 

    public MyTimer() {
        //constructor
    }

    public long getRemainingTime() {
        //returns remaining time
    }

    public StringProperty timerStringPropertyProperty() {
        return timerStringProperty;
    }

    @Override
        public boolean start() {
            if (this.state.isRunning() ) {
                System.out.println("Already running.");
                return false;
            }

            this.startNanoTime = System.nanoTime();
            this.state = TimerStates.RUNNING;

            Runnable startTimerRunnable = …
Run Code Online (Sandbox Code Playgroud)

java multithreading javafx property-binding javafx-bindings

5
推荐指数
1
解决办法
583
查看次数