我正在迁移到OpenJDK 11和OpenJFX 11.我已经从源代码成功构建了两个,并且根据OpenJFX wiki使用--with-import-modules = [path_to_modular_sdk] arg来构建JDK.一切顺利,直到我尝试在Apache Netbeans 9中构建一个简单的"Hello World"测试项目; 此时我收到以下错误:" 在活动JDK中找不到JavaFX部署库 ".试图搜索这方面的信息,但找不到任何相关的信息.如果有人能够阐明造成这种情况的原因,我将非常感激.谢谢你的帮助.帕特里克.
我刚刚使用 openjdk 11 在 intelliJ 中创建了一个新的 JavaFX 项目,并在他们的网站上下载了最后一个 openjfx 库。
这是我所做的:
我已添加到运行/调试虚拟机选项:--module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml
虚拟机选项
我添加了一个新变量 env PATH_TO_FX :PATH_TO_FX=%programfiles%\Java\javafx-sdk-11\lib
所以它编译得很好,但在运行时失败:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found
有谁知道我在这里缺少什么?
PS:我已经关注此链接https://openjfx.io/openjfx-docs/#install-javafx
编辑 :
我这里应该有 onpenjfx 库吗?类路径
在阅读到可以长期支持OpenJDK 11之后,我决定创建一个小应用程序(使用Gradle)与JavaFX结合起来测试一些功能。经过一番努力,我设法创建了一个可以正常打开的Hello World .jar文件。
现在,我要进行下一步:运行.jar文件,而无需事先下载任何与Java相关的内容,因为由于必须正确设置PATH等,此刻安装OpenJDK很小。
关于将OpenJDK 11应用程序与Java 11 JRE捆绑在一起的搜索不会返回很多答案。我觉得这很奇怪,因为(据我了解)OpenJDK 11是第一个不附带JRE的产品。
所以我的问题是:如何结合运行时来交付Java 11应用程序?
我写了一个自定义的 TableColumn 宽度调整策略。您可以在 github 上的Java 8 / JavaFX 8 下查看其代码。如您所见,在方法distributeSpaceRatio()等地方,取决于TableColumn.impl_setWidth()我们计算后将列的宽度设置为所需的值。
我正在将我的项目迁移到 Java 11/JavaFX 11,并且该方法impl_setWidth()已从公共视图中删除。
还有另一种方法可以告诉表格列设置其宽度吗?我对任何解决方案持开放态度,只要它可靠并将 with 设置为(或接近)请求的值。
以下是我迄今为止尝试过的两个没有奏效的想法:
尝试 1:
这个给出了 NoMethodFoundException:
private void setColumnWidth ( TableColumn column, double targetWidth ) {
    try {
        Method method = column.getClass().getDeclaredMethod( "setWidth" );
        method.setAccessible( true );
        Object r = method.invoke( targetWidth );
    } catch ( Exception e ) {
        e.printStackTrace();
    }
}
尝试 2:
这个没有效果:
private void setColumnWidth ( TableColumn column, double targetWidth ) { …我创建了一个com.company.ep位于源文件夹中的模块com.company.ep(是的,我已从srcBuild Path中删除并删除它).在源文件夹中,我有几个包如下:
com.company.ep    <--- root source folder
    com.company.ep.main    <--- package 1
    com.company.ep.model   <--- package 2
    com.company.ep.view    <--- package 3
    // ... more packages
    module-info.java
主类位于包中com.company.ep.main.Main.在我的module-info.java配置依赖项:
module com.company.ep {
    exports com.company.ep.main;
    exports com.company.ep.model;
    exports com.company.ep.view;
    // ... more exports
    requires javafx.controls;
    requires javafx.graphics;
}
当我尝试启动我的程序时,Eclipse告诉我:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found, required by com.company.ep
所以我尝试在命令提示符下运行它:
java -p d:\Applications\openjfx-sdk-11\lib;bin -m com.company.ep/com.company.ep.main.Main
bin是Eclipse的输出文件夹,它工作.
所以我去了 …
我正在努力处理JavaFX应用程序的混淆问题。以该项目为基础:
https://github.com/openjfx/samples/tree/master/IDE/IntelliJ/Non-Modular/Gradle
Proguard抛出此错误:
java.io.IOException: Can't write [Path\infile.jar] (Can't read [Path\outfile.jar] (Duplicate jar entry [a.class]))
Proguard配置文件:-dontoptimize -dontshrink
-libraryjars 'E:\Prog\jdk-11.0.2\jmods'
-libraryjars 'E:\Prog\javafx-sdk\lib'
# Save meta-data for stack traces
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Rename FXML files together with related views
-adaptresourcefilenames **.fxml,**.png,**.css
-adaptresourcefilecontents **.fxml
-adaptclassstrings
# Keep all annotations and meta-data
-keepattributes *Annotation*,Signature,EnclosingMethod
# Keep entry-point class
-keep classpackage.App {
    public static void main(java.lang.String[]);
}
# Keep all classes inside application
-keep,allowobfuscation class package.** {
}
# Keep names of fields marked …我在Mac上运行Java版本11.0.2。当我编译导入的Java文件时,javafx.util.pair得到了一个error: package javafx.util does not exist。没有太多有用的资源来解决此问题。我在网上尝试了其他建议,但没有白费。目前,我正在尝试将JavaFX软件包添加到我的Java目录中。但这是行不通的。
这是我所做的:
下载了javafx-sdk-11.0.2文件夹。文件夹中有2个目录-Legal和lib
将legal目录中的项目移至/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/legal
将lib目录中的项目移动到/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib
重新打开终端以编译此.java文件。
问题_1:我错过了上面的任何东西吗?
问题_2:如果这种方法是错误的,您会提出什么建议?
我想不用说,我应该能够将Oracle自己的JDK与JavaFX(来自gluonhq)一起使用,以构建用户可以使用的可分发jar文件。
经过详尽的搜索,大量阅读(过去几个月中24小时或更长时间),最后是这个Google搜索查询:
how to make a fat jar -maven -gradle -scala -eclipse -ant -docker -hadoop -netbeans -jerkar -phy -mozni -yogurt -pizza - throwing -python -bacon
我绝对在路的尽头。到底为什么这么多工作?我该如何构建JavaFX应用程序并将其提供给想要实际使用它的人,而又不知道如何使用应用程序本身呢?
我正在尝试调整我的程序以在 Java 12 上运行。它目前在 Java 8 上运行并具有一些 JavaFX 组件(一些对话框)。它不是模块化的。我的 IDE 是 Eclipse,JavaFX jar 文件作为用户库包含在构建路径中。我想生成一个可运行的 jar 并将 javafx 文件捆绑在其中或将它们添加到自定义 JRE,以便我可以分发它,而不需要最终用户单独安装 Java12 或 JavaFX。
首先,我想尝试一个简单的HelloFX程序,修改后使其更类似于我的程序。
public class HelloFX2 {
    public HelloFX2() {
        startToolkit();
        // have to wait a second for the JavaFX thread to actually start, or else the Platform.runLater throws an exception
        try
        {
            Thread.sleep(1000);
        }
        catch(InterruptedException ex)
        {
            Thread.currentThread().interrupt();
        }
        // create the scene and display
        Platform.runLater(() -> {
            Scene theScene = createTheScene();
            final Stage stage = new …已经三天了,我在网上查找如何在 gradle 上解决这个问题
Caused by: java.lang.IllegalAccessError: class com.jfoenix.skins.JFXTabPaneSkin (in module com.jfoenix) cannot access class com.sun.javafx.scene.control.behavior.TabPaneBehavior (in module javafx.controls) because module javafx.controls does not export com.sun.javafx.scene.control.behavior to module com.jfoenix
在简单的想法项目中我添加了
--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix --add-exports javafx.controls/com.sun.javafx.scene.control=com.jfoenix --add-exports javafx.base/com.sun.javafx.binding=com.jfoenix --add-exports javafx.graphics/com.sun.javafx.stage=com.jfoenix --add-exports javafx.base/com.sun.javafx.event=com.jfoenix 
我知道,我必须添加 jvm 选项,但我该怎么做?
我在 intellij idea 上使用 gradle javafx 11.0.2,java 11,
这是build.gradle
plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}
compileJava.options.encoding = 'UTF-8'
repositories {
    mavenCentral()
}
dependencies {
    //     https://mvnrepository.com/artifact/com.jfoenix/jfoenix
    compile group: 'com.jfoenix', name: 'jfoenix', version: '9.0.9' …