【问题标题】:JavaFx - Code before Thread.sleep(1000) doesn't work, why? [closed]JavaFx - Thread.sleep(1000) 之前的代码不起作用,为什么? [关闭]
【发布时间】:2018-02-09 09:06:23
【问题描述】:

下面的 sn-p 可能有什么问题?

    @FXML 
    private Button btnLogOut;
    @FXML
    private Label lblStatus;

    @FXML 
    private void btnLogOut_Click() throws InterruptedException {
        lblStatus.setText("Logging out.."); // Doesn't work..?
        Thread.sleep(1000);
        System.exit(0);
    }

提前感谢您的帮助。

【问题讨论】:

    标签: java javafx delay fxml


    【解决方案1】:

    通过在应用程序线程上使用Thread.sleep,您可以防止 UI 更新。为了防止这种情况,您需要在不同的线程上运行等待/关闭代码并允许应用程序线程继续执行它的工作:

    @FXML 
    private void btnLogOut_Click() {
        // update ui
        lblStatus.setText("Logging out..");
    
        // delay & exit on other thread
        new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
            }
            System.exit(0);
        }).start();
    }
    

    您可能需要考虑使用Platform.exit() 而不是System.exit

    【讨论】:

      【解决方案2】:

      您似乎在 UI 线程上,因此文本没有更新,因为您与其余代码在同一个线程上。

      你应该使用Platform.runLater

      FutureTask<Void> updateUITask = new FutureTask(() -> {
          lblStatus.setText("Logging out..");
      }
      
      Platform.runLater(updateUITask );
      

      【讨论】:

        【解决方案3】:

        这对我有用:

        @FXML 
        private Button btnLogOut;
        @FXML
        private Label lblStatus;
        
        @FXML 
        private void btnLogOut_Click() throws InterruptedException  {
             lblStatus.setText("Logging out..");
             Thread.sleep(100);
        
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(FXMLMainController.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.exit(0);
                }
            });
        }
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 2021-08-27
        相关资源
        最近更新 更多