[英]JavaFX UNDECORATED Stage not showing
我可能对e(fx)clipse应用程序有问题。 我想在启动应用程序时显示启动屏幕。 我成功创建了实现StartupProgressTrackerService
类,并调用了stateReached
方法。 但是, javafx
本身存在问题。 我想用StageStyle.UNDECORATED
创建舞台。 但是,当我调用stage.show()
方法时, stage
不会立即呈现,而是在创建主窗口后立即出现。 它可以很好地与StageStyle.UTILITY
配合StageStyle.UTILITY
。 当我使用showAndWait()
方法时,它也可以正确呈现,但是它会停止加载我的应用程序,直到我关闭舞台。
这是我的代码:
public class MyStartupProgressTrackerService implements StartupProgressTrackerService {
private Stage stage;
public MyStartupProgressTrackerService() {
}
@Override
public OSGiRV osgiApplicationLaunched(IApplicationContext applicationContext) {
applicationContext.applicationRunning();
return StartupProgressTrackerService.OSGiRV.CONTINUE;
}
@Override
public void stateReached(ProgressState state) {
if (DefaultProgressState.JAVAFX_INITIALIZED.equals(state)) {
stage = new Stage(StageStyle.UNDECORATED);
stage.initModality(Modality.WINDOW_MODAL);
stage.setAlwaysOnTop(true);
ImageView view = null;
try {
view = new ImageView(SPLASH_IMAGE);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BorderPane bp = new BorderPane();
bp.getChildren().add(view);
Scene scene = new Scene(bp, 400, 300);
stage.setScene(scene);
stage.show();
}
}
}
我找到了一个丑陋的解决方案,但至少可以奏效。 我注意到该方法stage.showAndWait()
作为副作用完成了尚未渲染的所有控件的构建。 因此,诀窍是初始化启动画面,然后创建虚拟舞台,将showAndWait()
并立即close()
。 我知道这种解决方案远非理想,因此,如果有人可以向我展示替代方法以使其起作用,我将不胜感激:)
我的代码:
public void showSplash() {
splashScreen = createSplashScreen();
Stage stage2 = new Stage(StageStyle.TRANSPARENT);
splashScreen.show();
Platform.runLater(new Runnable() {
@Override
public void run() {
stage2.close();
}
});
stage2.showAndWait();
}
private Stage createSplashScreen() {
Stage stage = new Stage(StageStyle.UNDECORATED);
stage.setAlwaysOnTop(true);
VBox vbox = new VBox();
vbox.getChildren().add(new ImageView(splashImage));
Scene scene = new Scene(vbox, 400, 300);
stage.setScene(scene);
return stage;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.