【问题标题】:Why isn't my JavaFX application showing a web browser?为什么我的 JavaFX 应用程序不显示 Web 浏览器?
【发布时间】:2022-02-07 01:00:02
【问题描述】:

我有一个带有以下 Java 代码的模块化 JavaFX 应用程序:

package webbrowser;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import javafx.scene.web.WebEngine;
import javafx.stage.Stage;

public class WebBrowser extends Application {

    @Override
    public void start(Stage stage) {
        WebView browser = new WebView();
        WebEngine webEngine = browser.getEngine();
        webEngine.load("http://www.oracle.com");
        Scene scene = new Scene(browser, 500, 500);
        stage.setScene(scene);
        stage.show();
    }

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

}

这是 module-info.java 文件:

module webBrowser {
    requires javafx.controls;
    requires javafx.web;
    
    exports webbrowser;
}

我使用以下命令编译模块化 JavaFX 应用程序:

javac -d out --module-source-path . --module-path $JAVAFX_SDK/libs:$JAVAFX_JMODS --module webBrowser

我使用以下命令打包模块化 JavaFX 应用程序:

jpackage --type dmg --module-path $JAVAFX_JMODS:$JAVAFX_SDK/lib:out --add-modules javafx.controls,javafx.web,javafx.graphics,javafx.media --module webBrowser/webbrowser.WebBrowser

然后我将应用程序保存在我的 /Applications 文件夹中(我在 Mac OS 上)并打开应用程序。该应用程序打开一个 500x500 的窗口,但它不渲染任何图形,也不打开 Web 浏览器。该应用程序只是打开一个白色的空白 500x500 窗口。

为什么应用程序运行不正常?

当我使用 java(并放弃 jpackage)运行应用程序时,应用程序在 JVM 中运行良好,打开 Web 浏览器并打开 oracle.com 网页。

java --module-path out:$JAVAFX_JMODS:$JAVAFX_SDK/lib --add-modules javafx.controls,javafx.web --module webBrowser/webbrowser.WebBrowser

为什么我使用 jpackage 安装 dmg 并运行 Mac OS 应用时应用程序无法运行?

【问题讨论】:

  • 您使用的是哪个版本的 JavaFX?
  • 谢谢@jewelsea
  • jpackage/jlink 仅使用 jmods 目录,java/javac 仅使用 lib 文件夹。不要忘记尝试--win-console,查看信息here

标签: java macos javafx jpackage


【解决方案1】:

runtime images, modular from CLI 上的 openjfx.io 文档部分演示了下面概述的一些要点,并提供了用于编译、链接、打包和执行应用程序的命令行参数示例。

我建议您让链接的 openjfx 演示在您的环境中工作,然后为您的项目尝试相同的操作。

需要解决的一些问题:

  1. jmods 不能在运行时使用,只能在编译或链接时使用。

  2. 当您有 module-info.java 时,java/javac 不需要--add-modules

    • 对于 jpackage,只需在 --add-modules 中列出您的应用模块,您无需列出 javafx 包,因为它可以从您的模块信息中解决。
  3. 您的 lib 目录不一致,请始终使用相同(正确)的目录:

    • 有时您使用lib,有时您使用libs
  4. 提供一个onError 处理程序。

  5. 使用 jpackage 时,您应该只有 JavaFX 模块。

    • 您不需要模组和 SDK 库,只使用模组。

要检查的其他要点在答案中突出显示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2014-04-11
    • 1970-01-01
    • 2019-06-12
    • 2013-03-15
    • 2023-04-05
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多