这个问题已经被提出了,但我无法理解。想象一下。我有一个包含两个场景的程序。首先打开场景1,这是连接到数据库的场景。有一个名为“状态”的标签,当连接建立时(通过点击“连接”按钮),应该从“未连接”变为“已连接”。因此,我编写了一个函数来处理按钮“连接”的onClick事件。这个函数在控制器类中声明和定义(我正在使用带有场景构建器的fmxl设计)。所以基本上,我想从控制器类内部的连接函数(方法)更改状态为“已连接”(status.setText(“Connected”))。然而,当我这样做时,文本不会在连接建立后立即更改,而是在场景即将关闭并且我即将切换到新场景时才更改...我在互联网上阅读并看到我应该使用Platform.runLater和线程,所以我尝试:
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);
}
问题出在这段文本上,它应该改为“已连接”。只有当我的场景即将切换时,它才会发生变化......