首页 > 解决方案 > Java GUI 在 Thread.sleep 后未启动

问题描述

我试图在满足某个条件时弹出一个窗口,但在满足条件时。窗口没有打开。我正在使用 Thread.sleep

代码:

public void grow() {
    Thread thread = new Thread(() -> {
        try {
            Thread.sleep(this.harvestTime);
            if(water >= waterNeeded && fertelizer >= fertelizerNeeded) {
                this.harvest = true;
                AlertBox.display("CROP ALERT","A SEED HAS FINISHED GROWING");
                Thread.sleep(60000);
                if(harvest == true) {
                    withered = true;
                    harvest = false;
                    AlertBox.display("ALERT", "FAILED TO HARVEST A CROP. IT BECAME WITHERED!");
                }
            }
            else {
                this.withered = true;
            }
        } catch (Exception e) {
        }
    });
    thread.start();
}

标签: javamultithreadingjavafx

解决方案


Java FX 方法仅适用于 Java FX 线程。您不能也不应该使用后台线程中的 Java FX 组件/方法。

如果您需要显示来自后台线程的通知,请使用:

Platform.runLater(new Runnable() {
    @Override public void run() {
        bar.setProgress(counter / 1000000.0);
    }
});

在这种情况下Runnable,将被添加到 Java FX 事件队列中,并在 Java FX 线程中进行处理。


推荐阅读