让听众等待javafx

时间:2018-05-17 21:26:37

标签: java javafx delay

我在这里查了一些问题,但我找不到合适的答案。也许我使用错误的关键字进行搜索。但我发现并没有帮助。所以这是我的问题。我有一些圆圈和线条以某种方式滑动。 我想要的是在动画执行后更新平衡变量。

DoubleProperty balance = new SimpleDoubleProperty();

我更新余额如下:

if (shapeADone == false) {
    intersecting = arc.centerXProperty().lessThan(boldLine.getEndX() - 13);
    intersecting.addListener((obs, wasIntersecting, isNowIntersecting) -> {
        System.out.println("Collision!");
        animation1.stop();
        animation2.stop();
        animation3.stop();
    });
    again = true;
    balance.setValue(-1);
} else {
    fadeB();
    balance.setValue(1);
}

但是在主要方法中我想做这样的事情

level1.balance.addListener(ov -> {
           System.out.println("The new value is " +
                   level1.balance.doubleValue());
           if (level1.balance.getValue()==1) {
              //delay setting scene
               primaryStage.setScene(scene2);
           }
       });

我在设置scene2之前要执行一些动画,但由于平衡即时更新,我的动画无法执行。 我想知道是否有办法延迟收听平衡或设置场景。 我尝试了Thread.sleep和balance.wait,但它给出了运行时错误。

编辑:这个问题清楚地表明我对javafx缺乏了解。我想做的是简单,解决方案更简单。当动画执行到最后我更新余额的值。我想要的只是确保动画显示到最后。

1 个答案:

答案 0 :(得分:1)

以下是答案:

  URL url = new URL(url1);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        while(line != null){
            line = bufferedReader.readLine();
            data = data + line;
        }

        JSONArray JA = new JSONArray(data);
        for(int i =0 ;i <JA.length(); i++){
            JSONObject JO = (JSONObject) JA.get(i);
            singleParsed = (String) JO.get("referentiel");




            dataParsed = dataParsed + singleParsed +"\n" ;


        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }


       // }

作为Sedrick的评论,我改变了这样的代码。 将setOnFinish添加到需要执行的动画中可以解决问题。它正在工作。