gpt4 book ai didi

java - 如何从另一个场景JAVA取消定时器

转载 作者:行者123 更新时间:2023-11-30 10:19:51 24 4
gpt4 key购买 nike

我已经尝试阅读 Java 文档并进行了相当多的研究,但没有任何效果。基本上,当我改变场景时,我希望计时器取消。计时器的代码。省略了我创建计时器的部分。当我初始化时,我会调用定时器 timerUpdateLiveInfo():

private void timerUpdateLiveInfo() {
t1.schedule(tt1, 0,5000);
}

TimerTask tt1=new TimerTask() {
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
PendingOrders.setText(String.valueOf(orderDB.getNumOfOrder()));
String record = orderDB.getTopCanteens();
//System.out.println(orderDB.getTopCanteens());
String[] fields = record.split(";"); // attributes separated by ;
String canteenTop=fields[0];
String canteenTop2=fields[1];
String canteenTop3=fields[2];
MostPopularLabel1.setText(canteenTop);
MostPopularLabel2.setText(canteenTop2);
MostPopularLabel3.setText(canteenTop3);
}
});
}
};

当我尝试“本地”取消时,通过一个按钮就可以了。

@FXML
void handleTestingButton(ActionEvent event) {
cancelTimer();
}

public void cancelTimer() {
tt1.cancel();
t1.cancel();
System.out.println("Cancelled");
t2.cancel();
}

但是,当我尝试在它改变场景后使用另一个 fxml 调用时,计时器仍然继续运行:

public void handleReturnToUser(ActionEvent event) throws IOException {
WorkerHomeController workerHome= new WorkerHomeController();
workerHome.cancelTimer();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/ooppFinalProject/view/HomePage1.fxml"));
myScene = (Scene) ((Node) event.getSource()).getScene();
Stage stage = (Stage) (myScene).getWindow();
Parent nextView = loader.load();
workerHome.cancelTimer();

stage.setScene(new Scene(nextView));
stage.setTitle("Home Page");
stage.show();
}

请帮忙。非常感谢!

更新:

    public void handleReturnToUser(ActionEvent event) throws IOException{
//workerHome.cancelTimer();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/ooppFinalProject/view/HomePage1.fxml"));
myScene = (Scene) ((Node) event.getSource()).getScene();
Stage stage = (Stage) (myScene).getWindow();
Parent nextView = loader.load();
//workerHome.cancelTimer();

WorkerHomeController workerHome=loader.getController();
workerHome.cancelTimer();

stage.setScene(new Scene(nextView));
stage.setTitle("Home Page");
stage.show();
}

和堆栈跟踪:

    Caused by: java.lang.ClassCastException: ooppFinalProject.controller.HomePage1Controller cannot be cast to ooppFinalProject.controller.WorkerHomeController
at ooppFinalProject.controller.WorkerSideTabController.handleReturnToUser(WorkerSideTabController.java:91)
... 62 more

最佳答案

试试这个:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/ooppFinalProject/view/HomePage1.fxml"));
myScene = (Scene) ((Node) event.getSource()).getScene();
Stage stage = (Stage) (myScene).getWindow();
Parent nextView = loader.load();
WorkerHomeController workerHome=loader.getController();
workerHome.cancelTimer();

说明:您需要在 WorkerHomeController 上调用 workerHome.cancelTimer();,它实际上是 loader.load();< 时创建的 Controller 并通过 loader.getController();

获取它

关于java - 如何从另一个场景JAVA取消定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com