为了账号安全,请及时绑定邮箱和手机立即绑定

Javafx 线程加入交通灯 UI。如何同步线程?

Javafx 线程加入交通灯 UI。如何同步线程?

慕仙森 2021-10-28 09:42:24
我有一个模拟交通灯的 javafx UI。我为每个灯设置了三个线程,它们点亮了各自的灯,同时关闭了其他灯。我启动线程并使用 join() 以便每个线程可以在另一个线程启动之前点亮各自的灯。当我使用 Thread.join() 时,UI 会冻结,但我知道线程正在正常运行,因为我放入线程中的测试字符串会执行并在另一个线程执行之前等待适当的时间。代码如下——主要方法public void start(Stage primaryStage) {    lightBoard.setArcWidth(10);    lightBoard.setArcHeight(10);    lightBoard.setFill(Color.DARKGREY);    circleGreen.setFill(Color.WHITE);    circleYellow.setFill(Color.WHITE);    circleRed.setFill(Color.WHITE);    Group group = new Group();    group.getChildren().addAll(lightBoard, circleGreen, circleYellow, circleRed);    BorderPane light = new BorderPane(group);    light.setPadding( new Insets(20, 20, 20, 20) );    GridPane layoutControls = new GridPane();    layoutControls.setAlignment(Pos.CENTER);    Button btnStart = new Button("Start");    Button btnStop = new Button("Stop");    layoutControls.add(btnStart, 0, 0);    layoutControls.add(btnStop, 1, 0);    BorderPane root = new BorderPane();    root.setCenter(light);    root.setBottom(layoutControls);    Scene scene = new Scene(root, 380, 250);    primaryStage.setTitle("Traffic Light Simulator");    primaryStage.setScene(scene);    primaryStage.show();    // create and start threads    Runnable lightGreen = new LightGreen();    Runnable lightYellow = new LightYellow();    Runnable lightRed = new LightRed();    Thread threadGreen = new Thread(lightGreen);    Thread threadYellow = new Thread(lightYellow);    Thread threadRed = new Thread(lightRed);    while(true){        threadGreen  = new Thread(lightGreen);        threadGreen.start();        try{            threadGreen.join();        }我该如何解决这个问题?有人告诉我 Platform.runlater 可以使用,但不确定如何使用它。我需要为此任务使用多线程。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信