我们有一个包含多个场景的单个舞台的JDialog。每个场景都有一个下一个按钮。当用户点击“下一步”时,我们调用stage.setScene。这在Windows和Linux上运行良好,但在Mac上,setScene永远不会返回。应用程序挂起,似乎是一个线程死锁。这是一个重现问题的示例应用程序。我们还尝试了各种java 7版本和java8预发行版。我们认为我们找到了一些解决方法,但我们想了解为什么这段代码在Mac上存在问题。带有错误的示例应用程序:
public class SampleFxInsideSwing
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new SampleFxInsideSwing().initFX();
}
});
}
private void initFX()
{
JDialog dialog = new JDialog();
dialog.setSize(new Dimension(500,500));
final JFXPanel stage = new JFXPanel();
dialog.add(stage);
Platform.runLater(new Runnable()
{
@Override
public void run()
{
Button nextButton = new Button("Next");
nextButton.setOnAction(new EventHandler<ActionEvent>()
{
//@Override
public void handle(ActionEvent event)
{
try
{
System.out.println("Clicked");
AnchorPane parent = FXMLLoader.load(SampleFxInsideSwing.class.getResource("SampleFxml.fxml"));
Scene secondScene = new Scene(parent);
stage.setScene(secondScene);
System.out.println("Displaying second scene!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
Group group = new Group();
group.getChildren().add(nextButton);
Scene scene1 = new Scene(group);
stage.setScene(scene1);
}
});
dialog.setVisible(true);
}
}