带有fxml的JavaFX和ProgressIndicator
我从早上就在想如何解决这个问题。我有登录申请。当用户等待登录时,我希望使用processindicator。我使用了第二个线程,但它不工作 主加载器fxml 主控制器带有fxml的JavaFX和ProgressIndicator,java,javafx,Java,Javafx,我从早上就在想如何解决这个问题。我有登录申请。当用户等待登录时,我希望使用processindicator。我使用了第二个线程,但它不工作 主加载器fxml 主控制器 @FXML public StackPane MainStackPane; public void initialize(URL arg0, ResourceBundle arg1) { FXMLLoader loader = new FXMLLoader(this.getClass().getResource
@FXML public StackPane MainStackPane;
public void initialize(URL arg0, ResourceBundle arg1) {
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/LoginForm/Login.fxml"));
Pane pane = null;
try {
pane = loader.load();
} catch (IOException e) {System.out.println(e.getMessage());}
LoginController login = loader.getController();
login.setMainController(this);
setScreen(pane, true);
}
public void setScreen(Pane pane, boolean clean){
MainStackPane.getChildren().addAll(pane);
}
登录信息:
private MainController mainController;
private void Zaloguj() throws IOException {
String cryptUser = null, cryptPass = null;
Test test = new Test(this.mainController);
test.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
LoginSQL sql = new LoginSQL();`
Byte LoginResult = sql.SQLselect(cryptUser, cryptPass);
...}
课堂测试
public class test extends Service<Void>{
private MainController mainController;
public test(MainController mainController) {
this.mainController = mainController;
}
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
System.out.println("Service: START");
ProgressIndicator p = new ProgressIndicator();
Platform.runLater(new Runnable() {
@Override public void run() {
mainController.MainStackPane.getChildren().addAll(p);
}});
if (isCancelled()) {
mainController.MainStackPane.getChildren().remove(p);
}
return null;
};};}}
ProgressIndicator仅在登录后的下一个窗口中显示。如何做?JavaFX渲染仅在主线程中进行。如果添加ProgressIndicator,然后使用Thread.sleep,JavaFX在Thread.sleep完成之前不会呈现该指示器。此外,如果登录请求挂起,JavaFX还将等待登录请求完成后再呈现
你要做的是确保永远不要中断/挂起主线程。删除Thread.sleep,并将登录请求移动到子线程。请求完成后,通知主线程,以便它可以删除ProgressIndicator。非常感谢您的建议。我将登录名移动到一个新线程,并删除了睡眠。这是一个问题,因为线程是在方法Zaloguj中执行整个代码之后启动的。在正确登录后,我应该将加载窗口的代码放在哪里?确定,完成了!:在方法Zaloguj中:.runningProperty.addListenerevent->{FXMLLoader。。。。