最近公司要做一个javafx内嵌浏览器的项目在更换浏览器内核后出现窗口关闭后点击图标项目出现闪退的情况,在网上找了一圈都没有找到想要的结果,可能是这个技术太冷门的缘故,故写一个案例仅供参考,不多bb直接上结果;
如果 JavaFX 程序在关闭 Stage 窗口后尝试重新打开该窗口时崩溃,可能是因为您没有正确地管理 Stage 对象的生命周期。
当您关闭一个 Stage 窗口时,这个舞台对象就会被销毁。因此,在您尝试重新打开该窗口之前,您需要先创建一个新的 Stage 对象,然后根据需要对其进行配置和设置。例如:
```java
private Stage previousStage;
// ...
public void start(Stage primaryStage) {
// 保存主舞台的引用
previousStage = primaryStage;
// 其他代码...
}
private void openNewStage() {
// 创建新舞台
Stage newStage = new Stage();
Scene scene = new Scene(new BorderPane(), 400, 300);
newStage.setScene(scene);
// 显示新舞台并隐藏旧舞台
newStage.show();
previousStage.hide();
// 保存新舞台为新的 “previousStage”
previousStage = newStage;
}
private void reopenPreviousStage() {
// 创建新的 Stage 对象
Stage newStage = new Stage();
// 配置新的 Stage 对象,例如设置舞台标题、场景等
newStage.setTitle("Previous Stage");
Scene scene = new Scene(new BorderPane(), 400, 300);
newStage.setScene(scene);
// 显示新的 Stage 对象并隐藏旧的 Stage 对象
newStage.show();
previousStage.hide();
// 将新的 Stage 对象保存为新的 “previousStage”
previousStage = newStage;
}
// ...
```
在此示例中,我们使用了 `previousStage` 实例变量来保存主舞台的引用。当打开一个新的 Stage 时,我们将主舞台隐藏,并保存新打开的窗口(即新的 `previousStage`)以备将来使用。在重新打开之前关闭的 Stage 窗口时,我们先创建一个新的 Stage 对象,然后根据需要对其进行配置和设置,最后将其显示并隐藏旧的 Stage 对象。
需要注意的是,如果您没有正确地管理 Stage 对象的生命周期,那么程序可能会出现内存泄漏、崩溃等问题,因此请务必注意。