- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 JXBrowser 嵌入到使用 Java11 运行的 SpringBoot JavaFX 应用程序中。我的问题是当我从创建的可执行 jar 运行应用程序时,浏览器没有显示在场景中。浏览器已加载,提供有关已加载网站的反馈,并且已经是场景的一部分,但不可见。
在 IntelliJ 中运行或使用 Maven exec 目前正在运行。当我将浏览器模块切换到 LIGHTWEIGHT 时,这三种运行可能性都运行良好。在 HEAVYWEIGHT mod 中从 jar 运行有什么问题?
我的系统:Windows10-64、Java11、SpringBoot 2.1.0.RELEASE、JXBrowser 6.21、OpenJFX 11
主类
@Slf4j
@SpringBootApplication
public class Main extends Application
{
private ConfigurableApplicationContext springContext;
public static void main(final String[] args)
{
Application.launch(args);
}
@Override
public void init()
{
springContext = SpringApplication.run(Main.class);
springContext.getAutowireCapableBeanFactory().autowireBean(this);
}
@Override
public void start(Stage stage)
{
final Browser browser = new Browser();
stage.setScene(new Scene(new BrowserView(browser)));
stage.show();
browser.loadURL("http://www.google.de");
}
@Override
public void stop()
{
springContext.close();
}
}
public class StartMain
{
public static void main(String[] args)
{
Main.main(args);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>de</groupId>
<artifactId>app</artifactId>
<version>1.0.10-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<jxbrowser.version>6.21</jxbrowser.version>
<javafx.version>11</javafx.version>
</properties>
<repositories>
<repository>
<id>com.teamdev</id>
<url>http://maven.teamdev.com/repository/products</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.teamdev.jxbrowser</groupId>
<artifactId>jxbrowser-cross-platform</artifactId>
<type>pom</type>
<version>${jxbrowser.version}</version>
</dependency>
<dependency>
<groupId>com.teamdev.jxbrowser</groupId>
<artifactId>jxbrowser-win64</artifactId>
<version>${jxbrowser.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>${javafx.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>...StartMain</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
最佳答案
我已经设法构建了该项目,并获得了可以运行它的试用许可证。正如您所提到的,从 IDE 或命令行运行 mvn compile exec:exec
(我也尝试过使用 Gradle,./gradlew run
,添加所需的 --add-exports),工作正常,显示浏览器并加载给定的 URL。
但是,正如您所说,如果您创建一个胖 jar 并运行它,它不会显示浏览器,但 JavaFX 可以工作,您可以看到一些事件正在进行,只是没有渲染。
我在 JDK 8、9、10 和 11 下都试过了。只有在 8 下我才能得到 fat jar 来显示浏览器。
一般来说,使用胖 jar 是一种不好的做法,现在更糟糕的是,您必须包含 JavaFX SDK 中的 JavaFX 类。
分发应用程序的更好方法是使用 jlink .
鉴于 com.teamdev.jxbrowser:jxbrowser
不是模块化的,你不能完全使用jlink
使用您的项目,但您可以仅使用 JavaFX 模块创建自定义运行时镜像,并使用它来运行您的应用程序,唯一的依赖关系为 jxBrowser
(为方便起见,我没有使用 SpringBoot)。
因此,如果您从 here 下载 JavaFX jmods ,解压缩并运行:
export PATH_TO_FX_MODS=/path-to/javafx-jmods-11
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS \
--add-modules=java.se,javafx.web,javafx.fxml,javafx.swing \
--output jre
jre/bin/java -cp \
/Users/<user>/.gradle/caches/modules-2/files-2.1/com.teamdev.jxbrowser/jxbrowser/6.22/c9...6b/jxbrowser-6.22.jar:\
/Users/<user>/.gradle/caches/modules-2/files-2.1/com.teamdev.jxbrowser/jxbrowser-mac/6.22/fa...d4/jxbrowser-mac-6.22.jar:\
build/libs/browserApp.jar jxbrowser.BrowserApp
jxBrowser
依赖项不起作用。
There can be files with the same path present in multiple JARs and by default the shade plugin includes the first file in the fat JAR and discards the rest.
关于spring-boot - 浏览器 HEAVYWEIGHT 在场景中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53380899/
我已经多次读到 EJB 是重量级的……但昨晚我正在浏览关于 EJB 的 Java EE 6 教程,它们似乎只是普通的 Java 对象,除了它们可以有像 Stateless 或 Singletons 这
我正在尝试将 JXBrowser 嵌入到使用 Java11 运行的 SpringBoot JavaFX 应用程序中。我的问题是当我从创建的可执行 jar 运行应用程序时,浏览器没有显示在场景中。浏览器
我目前正在研究 JxBrowser 6.2 的评估许可证。 我按如下方式创建 BrowserView: Browser browser = new Browser(BrowserType.HEAVYW
有没有好的轻量级和重量级组件的overlay组件库? 即使具有最高的不透明度设置,这也可以通过 JLabel 实现吗? overlay组件需要放置在组件的任何部分之上并显示文本。 类似于 http:/
我正在尝试让拖放功能与 Linux 中的 JxBrowser 一起使用。我希望在一个选项卡中能够拖放我的 swing 组件,并在另一个选项卡中拥有 jxbrowser。但是,当将 jxbrowser
我正在开发一个具有自定义形状的应用程序,但我的按钮工具提示存在一些问题。我在一个简单的例子中隔离了这个问题,这正好说明了我的情况。 你可以看到,中间按钮的工具提示显示得很好,因为它比根面板大,但是左边
在我的 swing 应用程序中,当我从我的主要组件中删除一个 jogl GLCanvas 以在同一位置添加一个 jPanel 时,有一些显示故障:在删除旧组件和添加新组件之前,之前显示在 GLCanv
我是一名优秀的程序员,十分优秀!