は、この質問は、すでに尋ねているが、私はそれをudnerstand copuldnt。想像してみろ。私は2つのシーンを持つプログラムを持っています。データベースへの接続のためのシーンである第1のシーン1が開かれる。 Statusと呼ばれるラベルがあり、接続が確立されると([接続ボタン]をクリックして)「切断」から「接続済み」に変わる必要があります。だから私はボタンを "Connect" onClickイベントを取る関数を作った。この関数は、コントローラクラス内で宣言され、定義されています(私はfmxlをシーンビルダで設計しています)。だから基本的に私はコントローラクラスの内部にある接続関数(メソッド)からステータスを "接続済み"(status.setText( "Connected"))に変更したいと思っています。しかし、私はそれを行う際に、接続が確立された後、テキストは瞬時に変更されていませんが、シーンがクローズしようとしていると私は新しいものにシーンを変更しようとしていたとき、それは変更さ...私はインターネット上で読んで、私はPlatform.runLaterを使用する必要があることを見たので、私が試しスレッド:JavaFXの
private void changeSC() throws IOException, InterruptedException, SQLException
{
dbConnect();
Thread thrd = new Thread() {
public void run() {
Platform.runLater(new Runnable() {
@Override public void run() {
status.setText("Connected");
status.setTextFill(Color.GREEN);
}});
}
};
thrd.start();
//pb.setProgress(1.0);
Parent root = FXMLLoader.load(getClass().getResource("Design.fxml"));
Scene primary = new Scene(root,1024,768);
primary.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
System.out.println("Text changing to COnnected");
status.setTextFill(Color.GREEN);
Thread.sleep(2000);
Main.window.setScene(primary);
}
changeSCが接続]ボタンをクリックしたときに実行される関数です。これは私の古いバージョンでも動作しません:
private void changeSC() throws IOException, InterruptedException, SQLException
{
dbConnect();
status.setText("Connected");
status.setTextFill(Color.GREEN);
//pb.setProgress(1.0);
Parent root = FXMLLoader.load(getClass().getResource("Design.fxml"));
Scene primary = new Scene(root,1024,768);
primary.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
System.out.println("Text changing to COnnected");
status.setTextFill(Color.GREEN);
Thread.sleep(2000);
Main.window.setScene(primary);
}
問題は「接続済み」に変更する必要があります。それは私のシーンが切り替わっされようとしているだけのときに変化する....
だけで、なぜあなたはスレッド –