私はこの問題を解決する方法を朝から思います。私はログインアプリケーションを持っています。ユーザーがログインを待っているときに私はprocessindicatorを使いたい。私は2番目のスレッドを使用するが、それは fxmlのJavaFXとProgressIndicator
メインローダFXML
メインコントローラ
@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);
}
LoginForm
を動作しません: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);
...}
クラスTest
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;
};};}}
ProgressIndic atorはログイン後に次のウィンドウにのみ表示されます。どうやってするの ?
ご提案いただきありがとうございます。私は新しいスレッドにログインを移動し、私はスリープを削除します。これは、コードがメソッド "Zaloguj"で実行された後にスレッドが開始されるため、問題です。正しいログイン後にウィンドウをロードするコードはどこに置くのですか? – Light
ok完了!メソッドの中の : .runningProperty()。addListener(イベント - > { FXMLLoader ....) – Light