相关疑难解决方法(0)

JavaFX 11:使用Gradle创建一个jar文件

我正在尝试将JavaFX项目从8 Java版升级到11版.当我使用"运行"Gradle任务(我遵循Openjfx教程)时,它工作,但是当我构建(使用"jar"Gradle任务)并执行(使用"java -jar")jar文件时,消息"Error :缺少JavaFX运行时组件,并且"运行此应用程序需要".

这是我的build.gradle文件:

group 'Project'
version '1.0'
apply plugin: 'java'
sourceCompatibility = 1.11

repositories {
    mavenCentral()
}

def currentOS = org.gradle.internal.os.OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}
dependencies {
    compile "org.openjfx:javafx-base:11:${platform}"
    compile "org.openjfx:javafx-graphics:11:${platform}"
    compile "org.openjfx:javafx-controls:11:${platform}"
    compile "org.openjfx:javafx-fxml:11:${platform}"
}

task run(type: JavaExec) {
    classpath sourceSets.main.runtimeClasspath
    main = "project.Main"
}

jar {
    manifest {
        attributes 'Main-Class': 'project.Main'
    }
    from …
Run Code Online (Sandbox Code Playgroud)

jar gradle java-11 javafx-11

27
推荐指数
3
解决办法
1万
查看次数

如何在 Java 中创建独立的 .exe(无需安装程序和 JRE 即可运行)

如何在没有程序安装程序的情况下.exe为我的项目(我在 IntelliJ IDEA 中编写)制作独立的 Windows 可执行文件( )JavaFX?我希望用户下载该.exe文件并开箱即用,无需安装程序,即使他们的计算机上没有 JRE。这可能吗?到目前为止,我已经阅读了一些有关以下选项的内容:

  • launch4j - 似乎将所需的 JRE文件.exe
  • install4j - 它创建一个安装程序,一旦运行,就会创建.exe文件。

所以,如果我理解正确的话,这两者都不会帮助我。我找到了这个这个帖子,但它们不涵盖我的具体案例。对不起,如果我问了一个愚蠢的问题,这是我的第一个 Java GUI。

java exe javafx

21
推荐指数
1
解决办法
2万
查看次数

Maven配置文件激活条件中os.family的值

Maven允许基于其运行的操作系统系列激活某些构建配置文件,例如:

<profile>
    <activation>
        <os><family>Windows</family></os>
    </activation>
</profile>
Run Code Online (Sandbox Code Playgroud)

围绕这个问题有很多问题:当时允许的值是os.family多少?他们是否区分大小写?Linux会遇到Unix吗?还是unix?等等.

我在哪里可以找到有关允许值的信息 - 或者至少Maven从哪里获取这些值?环境变量?

environment-variables maven maven-profiles

18
推荐指数
4
解决办法
2万
查看次数

打包非模块化JavaFX应用程序

我有一个Java 8应用程序,它使用JavaFX,主类扩展了 javafx.application.Application.目前,我将它作为胖罐提供,它在Oracle Java 8上运行良好.

现在我希望它能够在OpenJDK 11上运行.要添加JavaFX,我已经将org.openjfx中的工件添加到类路径中,并将它们包含在胖jar中.如果我从命令行启动我的jar,我明白了

Error: JavaFX runtime components are missing, and are required to run this
application
Run Code Online (Sandbox Code Playgroud)

我找到了解决此问题的两种可能方法:

  1. 脏的:编写一个特殊的启动器,它不会扩展应用程序并绕过模块检查.请参阅http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-June/021977.html
  2. 干净的:将--module-path和--add-modules添加到我的命令行.这个解决方案的问题是,我希望我的最终用户能够通过双击启动应用程序.

虽然我可以使用1.作为一种解决方法,但我想知道目前(OpenJDK 11)构建/交付非模块化JavaFX应用程序的可执行胖罐的方法.有人可以帮忙吗?

java javafx maven openjfx javafx-11

11
推荐指数
1
解决办法
3377
查看次数

如何为没有本机安装程序的JavaFX应用程序创建可运行的jar

我有一个应用程序,在从Eclipse导出为runnable jar并将其"打包所需的库到生成的JAR"后,可以使用"java -jar blah.jar"运行.

我添加了一些JavaFX代码来弹出Web浏览器.现在似乎不可能制作一个可以在小型Java版本中运行的可运行jar.当我将它导出为可运行的jar时,它会复制到我的次要版本特有的jfxrt.jar中.如果我使用"java -jar blah.jar"为完全匹配的java版本(jdk1.7.0_17)运行此jar,那么它工作正常,但如果我使用一个稍微更新(jdk1.7.0_45)然后它无法解决swingx上课正确."写一次在任何地方运行"都是如此.

我尝试使用JavaFX ant任务,但我无法完成实际打包依赖jar的任务.这实际上并不包括它创建的jar中的fx:resources jar,就像魔术eclipse"将所需的库包装到生成的JAR中"完美无缺:

<fx:jar destfile="${dist}/${dist.jar}"> 
        <fx:application id="BlahTesterApp" 
            mainClass="blah.MainClass" 
            toolkit="swing"/> 

        <fileset dir="${build}"/> 

        <fx:resources> 
            <fx:fileset dir="${lib}" includes="**/*.jar" />
        </fx:resources>

        <manifest> 
            <attribute name="Implementation-Vendor" value="My Team"/>
            <attribute name="Implementation-Title" value="Tester App"/> 
        </manifest> 
    </fx:jar> 
Run Code Online (Sandbox Code Playgroud)

并且似乎只能创建我不想要的"本地捆绑".我不想让用户在以前能够运行darn jar时安装rpm或deb.

我不明白为什么Oracle必须在这里引入自己神奇的额外部署层.他们不想让人们使用JavaFX吗?

java eclipse ant javafx jar

8
推荐指数
1
解决办法
2万
查看次数

如何用JDK 11打开JavaFX .jar文件?

我在IntelliJ中创建了一个JavaFX项目.我可以在IntelliJ中运行项目.我在配置中添加了以下代码:

--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
Run Code Online (Sandbox Code Playgroud)

但是项目的输出.jar文件(由Artifects制作)不会运行.我测试了这些命令,但没有任何机会:

java  --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar Timer.jar
java  --module-path %PATH_TO_FX% --add-modules javafx.controls  Timer.jar
Run Code Online (Sandbox Code Playgroud)

命令行的上一个错误日志:

Error: Could not find or load main class Files\Java\javafx-sdk-11.0.1\lib
Caused by: java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
Run Code Online (Sandbox Code Playgroud)

ps:在JDK-10上构建时,我可以运行这个项目的.jar文件

编辑:

我下载了JavaFX并将其lib文件夹添加到系统环境中.为了将JavaFX添加到项目中,我执行了以下过程:项目结构>库>添加> Java> JavaFxPath/lib

然后我在此过程中为输出jar文件创建了Artifect:项目结构> Artifects>添加> JAR>从具有依赖项的模块> main类:main.Main.

java javafx openjfx java-11

8
推荐指数
1
解决办法
6881
查看次数

从jdk跨平台删除JavaFX后会不会?

JavaFX 11是否跨平台?正如我在openjfx.org中看到的,我必须为每个平台下载版本.如果是这样,我可以以任何方式以跨平台形式使用它吗?我应该为每个java版本使用每个javafx版本吗?不要告诉我使用maven或类似的东西.我想编写一个跨平台的软件.而且每个操作系统的每个版本都没有多版本软件.我在检查操作系统后加载模块但我可以这样做吗?任何方式都有很多跨平台的库,即使它有本机代码,为什么OpenJFX不这样做呢?

java cross-platform javafx release javafx-11

7
推荐指数
1
解决办法
1139
查看次数

无法生成跨平台javaFX应用程序

我似乎无法从 javaFX 应用程序生成跨平台构建。

\n

当我从 IntelliJ 运行它时,它工作正常,如果通过 maven 打包它,我还可以在 Linux 上运行生成的 jar。

\n

当我尝试在 Mac 上运行 jar 时出现问题,似乎不包含 JavaFX 库,然后我得到以下堆栈跟踪:

\n
Graphics Device initialization failed for : es2, sw\nError initializing QuantumRenderer: no suitable pipeline found\njava.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found\n    at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)\n    at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)\n    at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:261)\n    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)\n    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)\n    at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)\n    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)\n    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)\n    at java.base/java.lang.Thread.run(Thread.java:832)\nCaused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found\n    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)\n    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)\n    ... 1 more\nException in thread \xe2\x80\x9cmain\xe2\x80\x9d …
Run Code Online (Sandbox Code Playgroud)

java maven javafx-11

7
推荐指数
1
解决办法
2165
查看次数

JavaFX16 警告:不支持的 JavaFX 配置:类是从“未命名模块@***”加载的

我正在尝试使用 OpenJDK16 运行 JavaFX16 应用程序(应用程序本身是通过 Java 1.8 编写的)。不幸的是,每次运行我的应用程序时,我都会收到以下警告消息:

--- exec-maven-plugin:3.0.0:exec (default-cli) @ ListPlanWizard --- ???. 2021 年 1 月 14 日下午 12:46:53 com.sun.javafx.application.PlatformImpl 启动警告:不支持的 JavaFX 配置:从“未命名模块 @1cebc698”加载类

你能解释一下为什么我会得到它,我该如何避免这种情况?

  • 请注意,与我在 Internet 上发现的此或类似警告的其他问题不同,我的应用程序在此之后不会崩溃或按预期工作。

  • 另请注意,我使用此问题中的提示来避免 错误:缺少 JavaFX 运行时组件,并且需要运行此应用程序

  • 我不在我的项目属性中使用外部 JavaFX OpenSDK 或其他东西。

我的 pom.xml 文件附在下面:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>bla.blabla</groupId>
    <artifactId>ListPlanWizard</artifactId>
    <version>0.9.3</version>
    <packaging>jar</packaging>

    <name>ListPlanWizard</name>
    <description>blablablablabla</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <start-class>bla.blabla.ListPlanWizard.Crutch</start-class>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency> 
        <dependency> …
Run Code Online (Sandbox Code Playgroud)

java javafx maven

7
推荐指数
1
解决办法
3421
查看次数

了解主类如何影响JPMS

我有一个非常基本的JavaFX应用程序,如果Application类不是 Main类,它可以完美地工作:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;

public class Main {

    public static void main(String[] args) {
        Application.launch(App.class, args);
    }

}

public class App extends Application {

    @Override
    public void start(Stage primaryStage) {
        FXMLLoader loader = new FXMLLoader(); // works
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,当我将两者合并在一起时(这是大多数教程中推荐的方式,包括OpenJFX的官方文档),模块系统抛出IllegalAccessError(至少在OpenJDK 11.0.2上):

public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        FXMLLoader loader = new FXMLLoader(); // throws IllegalAccessError
    }

    public static void main(String[] args) {
        launch(MainApp.class, args);
    } …
Run Code Online (Sandbox Code Playgroud)

java javafx java-platform-module-system java-11 javafx-11

6
推荐指数
1
解决办法
103
查看次数