【问题标题】:Java GUI not launching after Thread.sleepJava GUI 在 Thread.sleep 后未启动
【发布时间】:2018-08-13 09:58:59
【问题描述】:

我试图在满足某个条件时弹出一个窗口,但是在满足条件时。窗口没有打开。我正在使用 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();
}

【问题讨论】:

  • GUI 框架(不仅仅是 Java,其他的也一样)通常不能在线程中工作,您必须将 GUI 活动提交给 GUI 线程。

标签: java multithreading javafx


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多