2016-05-11 8 views
0

私は現在、マルチスレッドを使用してログインした後、次のページに進む前に点滅するラベル「ロード」を一定期間表示するアプリケーションを作成しています。ここに私の現在の進行状況は次のとおりです。JavaFXマルチスレッドの問題

public class LoadingController implements Initializable { 

@FXML 
private Label loadingLabel; 

boolean ready = false; 

public void setReady() { 
    System.out.println("now I'm ready"); 
    ready = true; 
} 

public void showLabel() { 
    this.loadingLabel.setVisible(true); 
} 

public void hideLabel() { 
    this.loadingLabel.setVisible(false); 
} 

public void goToPage2() { 
    try { 
     Parent root = FXMLLoader.load(getClass().getResource("Page2.fxml")); 
     Scene scene = new Scene(root); 
     Stage stage = Assignment.getStage(); 
     stage.setScene(scene); 
    } catch (IOException ex) { 
     Logger.getLogger(LoadingController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

/** 
* Initializes the controller class. 
*/ 
@Override 
public void initialize(URL url, ResourceBundle rb) { 
    System.out.println("In loading page"); 
    // TODO launch thread 
    Thread2 thread = new Thread2(this); 
    thread.start(); 


} 

}

public class Thread2 extends Thread { 

private LoadingController con; 

public Thread2(LoadingController con) { 
    this.con = con; 
} 

public void run() { 
    System.out.println("Hello from a thread!"); 
    try { 
     for (int i = 0; i < 20; i++) { 
      con.hideLabel(); 
      Thread.sleep(100); 
      con.showLabel(); 
      Thread.sleep(100); 

     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 

    } 

    con.setReady(); 

} 

}

私は現在、このエラーが シーンシーン=新しいシーン(ルート)をラインに関するます。

スレッド「スレッド6」の例外java.lang.IllegalStateException:FXアプリケーションスレッドではありません。

誰でもこの問題に関するガイダンスを提供できますか? ありがとう

答えて

1

ガイダンスは非常に簡単です - JavaFX並行性に関する関連ドキュメントをお読みください。

https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm

例外は明らかに間違っているかを表示します。間違ったスレッドから新しいシーンを作成しようとしました。 SceneGraphの操作は、JavaFXアプリケーションスレッドからのみ許可されます。

関連する問題