JavaFX应用程序无法随摇摆内容一起关闭

时间:2018-10-03 06:53:49

标签: java swing javafx

我尝试将</store> <store> @type elasticsearch host X.X.X.X port 9200 logstash_format false index_name updatetest.%Y%m%d --> In index name its not replacing with date </store> 组件添加到Swing应用程序中。我用JavaFX创建了SwingNode对象,但没有将此元素添加到主JButton中。关闭主阶段后,应用程序保持运行状态。我需要做些什么来解决此问题?

此处示例:

Scene

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但是我可以给您一些肮脏的解决方案来修复它。如果您创建SwingNode且未将其添加到Scene,则应用程序在关闭后仍保持运行状态。因此,您需要将SwingNode添加到Scene,但大小为零。这必须解决您的问题。

示例:

public class SwingFx extends Application {

    @Override
    public void start(Stage stage) {
        // create pane with SwingNode
        final SwingNode swingNode = new SwingNode();
        createAndSetSwingContent(swingNode);
        StackPane paneWithSwing = new StackPane(swingNode);

        // create invisible pane to initialize SwingPane in Scene
        Pane invisiblePane = new Pane(paneWithSwing);
        invisiblePane.setPrefWidth(0);
        invisiblePane.setPrefHeight(0);
        invisiblePane.setOpacity(0);

        // create Scene without visible SwingPane
        Button button = new Button("Set SwingNode");
        button.setOnAction(event -> {
            invisiblePane.getChildren().clear();
            stage.getScene().setRoot(paneWithSwing);
        });
        StackPane originalPane = new StackPane(invisiblePane, button);
        stage.setScene(new Scene(originalPane, 320, 180));
        stage.show();
    }

    private void createAndSetSwingContent(final SwingNode swingNode) {
        SwingUtilities.invokeLater(() -> swingNode.setContent(new JButton("Click me!")));
    }

    public static void main(String[] args) {
        launch(args);
    }
}