Java程序中 Swing调用JavaFX,实现内嵌Web浏览器

如果从Java程序中调用JavaFX,没有办法结束JavaFX的主线程,只能执行一次,多次从Java中调用JavaFX,会报主线程只能有一个。

所以,我们可以用Java自带的图形化界面Swing,通过Swing去调用JavaFX

// 引入JavaFX的jar包
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>17.0.2</version>
</dependency>

上代码

public class javaTest {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }

    private static void initAndShowGUI() {
        JFrame frame = new JFrame("Swing and JavaFX");
        final JFXPanel fxPanel = new JFXPanel();
        frame.add(fxPanel);
        frame.setSize(300,200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        Platform.runLater(new Runnable(){
            @Override
            public void run() {
                try {
                    initFx(fxPanel);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });
    }

    private static void initFx(JFXPanel fxPanel) throws IOException {
        Scene scene = createScene();
        fxPanel.setScene(scene);
    }

    private static Scene createScene() throws FileNotFoundException {
        Group root = new Group();
        Scene scene = new Scene(root, Color.ALICEBLUE);
		// Swing调用JavaFX中的WebView组件
        WebView browser = new WebView();
        WebEngine webEngine = browser.getEngine();
        webEngine.load("file:///D:/JavaFX.html");
        root.getChildren().add(browser);
        return scene;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值