更新1 :这是一个更有趣的事情。当我删除最后一行{mainapp.showReportingScreen();}时,程序首先执行findAplliedJars方法然后显示处理屏幕。
我在JavaFX中工作并且在按钮操作上苦苦挣扎。我想要的是,当点击该按钮时:
但是,我的程序跳过2.点。
这是我的代码:
public class SomeController implements Initializable {
.
.
.
@Override
public void initialize(URL location, ResourceBundle resources) {
.
.
.
someButton.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent event) {
Report.setUserName(userNameField.getText());
Report.setPassword(passwordField.getText());
Report.setSmAdress(smAdressField.getText());
mainApp.showProcessingScreen();
Report.findAppliedJars();
mainApp.showReportingScreen();
}
});
}
.
.
.
}
因此,如果没有显示 processingScreen ,我的程序会执行 findAppliedJars(),然后显示 reportingScreen 。
可能是什么问题?感谢。
更新2 :这是我的showProcessingScreen()方法:
public void showProcessingScreen() {
try {
// Load Report Screen
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("ProcessingScreen.fxml"));
AnchorPane processingScreen = (AnchorPane) loader.load();
// Set report screen into the center of root layout.
rootLayout.setCenter(processingScreen);
ProcessingScreenController controller = loader.getController();
controller.setMainApp(this);
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
除非您以某种方式暂停执行,否则程序将继续执行,并基本上跳过显示处理屏幕。要在一段时间内显示处理屏幕,您需要使用animation并在动画完成后显示报告屏幕。请注意,下面的代码只是您的最终结果可能看起来并且无法编译的概述。
Transition transition;
// Set up your transition or animation
transition = buildTransition();
// Show your processing screen within the transition
showProcessingScreen();
transition.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
Report.findAppliedJars();
mainApp.showReportingScreen();
}
});
如果您在处理屏幕显示时尝试在后台加载某些内容,则必须使用concurrency。如果你走这条路线,代码应该与上面类似,除非你使用Task class和setOnSucceeded method。还有其他方法可以执行此操作,但我相信这是最简单的方法。