问题标签 [javafx-11]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 将 JavaFX 应用程序与 openjdk 11 + 运行时捆绑在一起
我创建了一个依赖 OpenJDK 11 和 JavaFX 的小型 HelloWorld Java 应用程序。该应用程序打包在一个 jar 文件中,只有在我的系统上分别安装了 Java 11 和 JavaFX 时才能运行该文件。
现在我想将我的 jar 转换为一个独立的 Java 应用程序,其中包括 JavaFX 和一个功能齐全的 Java 运行时环境。这将允许我在不安装 OpenJDK 11 的情况下运行我的应用程序(这会带来技术障碍,例如正确设置 PATH 等)。
我可以找到有关在 Java 10 上创建自包含 Java 应用程序的信息,但找不到有关将 Java 应用程序与 OpenJDK 11 和 JavaFX 捆绑在一起的信息。
如何使用 OpenJDK 11 和 JavaFX 发布自包含的 Java 应用程序(包括 Java 运行时)?
java - FXMLLoader.load() 在 pre-java 9 样式中工作正常,但在模块中失败
我成功制作了一个简单的 JavaFX FXML 程序(Java 9 之前的风格,而不是模块)我使用了 3 个文件和主类,如下所示:
主班
它在 NetBeans 9 和带有 javac 和 java 的 DOS 终端中都能完美运行。
现在,我尝试在 Java 模块中制作相同的程序。下面是我的源结构:
模块信息.java
除了主类名之外,所有其余代码都是相同的。
它在 NetBeans 9 中编译,我也可以在 DOS 终端中编译,如下所示:
编译后,我将FXMLDocument.fxml文件放在 mods 目录中,如下所示。
但是,它无法运行。我在 NetBeans 9 和 DOS 终端中都尝试过,如下所示:
错误来自语句:
我知道,这个问题有很多帖子,但是当 java 模块中发生错误时,我找不到解决方案。我认为这不是文件位置问题,因为以下语句有效。
FXMLLoader.load()似乎在模块中不起作用。
如果它以非模块样式工作,我相信它也必须在模块中工作。
实际的错误信息如下;是的,我看到很多关于这个错误的问题,但我仍然找不到 java 模块的解决方案)我的 module-info.java 或我的编译或运行命令做错了吗?
java - 迁移到 JDK 11 + JavaFX 11 给出 RuntimeException
我有一个基于 Java 8 + JavaFX 的应用程序,我想迁移到 Java 11。基本目标是为网络上的用户提供一个 .jar,以便他们可以使用这个小应用程序。我使用 JavaFX 作为接口,使用 sqlite-jdbc 来生成数据库。
我有我的 module-info.java,编译似乎没问题:没有错误。但是如果我运行该应用程序,我会收到此错误:
我的模块信息.java
我在 Windows 10 x64bits 和JavaFX Windows SDK(最新版本 11)上使用 Netbeans 9。我没有使用 Maven(但也许我必须?)。
有什么办法解决这个问题吗?
java - Eclipse 4.9 上的 Java 11 和 E(fx)clipse JavaFX 插件:发生错误 - 请参阅日志文件
我无法让我的 Eclipse 2018-09 (4.9) 与 Java 11 和 E(fx)clipse JavaFX 插件一起运行。
我为 E(fx)clipse 运行了典型的Help -> Install new software
程序,但在重新启动后,Eclipse 完全崩溃:我什至无法再打开 Eclipse 以获得新的工作空间!
当我尝试运行 Eclipse 时,我得到一个对话框:
“发生错误。请参阅日志文件 C:\workspace\.metadata\.log”
我已将该日志文件的副本放在我的 Github上。
好吧,我可以使用这个手动库设置来运行一个 hello world JavaFX 应用程序,但我真的很想运行 E(fx)clipse 以获得 Eclipse 菜单选项和功能。那么如何解决呢?谢谢。
java - 为什么无法运行已编译的 JavaFX 11 类?
按照https://openjfx.io/openjfx-docs/#install-javafx的说明,我通过以下方式编译了示例 HelloFX.java:
但是现在如果我尝试运行它...
...我得到错误:
然而报告为未找到的文件在那里:
(我已经更改了权限u+x
以防万一出现问题,但显然这不是问题所在。
怎么了?
(是的,$PATH_TO_FX
确实指向javafx-sdk-11/lib
。)
gradle - Gradle Kotlin DSL 等效于 Groovy DSL“运行”?
我正在尝试使用 Gradle,按照此处的说明,使用 Kotlin 和 Java 11 构建一个简单的 JavaFX 11 程序。但是,此页面使用 Gradle 的 Groovy DSL,我正在尝试使用 Kotlin DSL。令人惊讶的是,我的 Google 搜索没有找到将每个 Groovy 构造映射到其等效的 Kotlin 构造的文档,或者一般解释如何将 Groovy DSL 代码转换为等效的 Kotlin DSL 代码。(这似乎是 Gradle 文档中的一个重大疏忽!)。
特别是,本文档包含以下 Groovy 代码:
据我所知,相当于第一部分的 Kotlin 似乎是:
但是,我无法弄清楚与第二部分等效的 Kotlin DSL 是什么。请注意,“run”是 Kotlin 标准库中的标准函数扩展,因此在 Kotlin DSL 中,此代码的 Kotlin 版本似乎不能出于相同目的使用名称“run”。
(注意:我考虑尝试使用一个插件来支持 JavaFX(例如,如本页所述),但该插件似乎使用起来相当复杂,而且我已经在这个项目中遇到了足够多的问题,即我很犹豫是否要在其中引入一个文档很少的开源插件。我现在真的正在尝试在 JavaFX/Gradle 中生成最简单的“Hello, World”程序,到目前为止,这似乎非常困难.)。
任何帮助,将不胜感激。
java - 如何使用 Java 11 启动 JavaFX 应用程序?
假设我安装了 Oracle JDK 11(只是为了让事情更简单)。然后我下载了 Gluon 的 JavaFX 11 并在 JDK 上解压。实际上,我在哪里解压 JavaFX 并不重要(因为我的下一个目标是制作我自己的基于 OpenJRE 的 JRE 安装程序)。然后我正在尝试启动应用程序:
我明白了:
启动层初始化时出错 java.lang.LayerInstantiationException: Package jdk.internal.jrtfs 在模块 java.base 和模块 jrt.fs 中
我尝试删除“jrs.fs”然后我的应用程序崩溃,因为一些与类加载器相关的重要系统类丢失了。使用 Java 11 启动 JavaFX 应用程序的正确方法是什么?我现在是否需要每次都为每个应用程序重新分发 JavaFX(因为现在必须在启动应用程序的命令行中指定它的位置)。
javafx - 为什么没有第一次调用 JavaFX 中的 onSuceeded(...) 方法?
我正在尝试从服务器加载数据。然后通过 JavaFX 视图显示加载的数据。我正在使用服务来执行网络操作,为此我正在使用 Apache HttpClients。最初,我认为这个错误与网络有关。我做了一些穴居人风格的调试,并意识到这个错误与服务相关联。奇怪的是,该服务在第二个运行时调用 onSucceeded() 方法(不同的实例,我没有重新启动服务)。我无法弄清楚为什么服务仅第二次调用 onSucceeded() 方法。
这是我为执行网络操作而实现的服务类。
这是调用服务并将数据注入视图的方法。
这是应用程序的日志。
java - 错误:“包在模块 'foo.bar' 中声明为 'javafx.beans.value'”
我开发了一个module-info.java
看起来像这样的库:
该库用于另一个项目,其中module-info.java
包含以下内容:
当我尝试使用时import javafx.beans.value.WritableValue;
出现错误
包
javafx.beans.value
在中声明foo.bar
,它不会将其导出到模块other.project
。
更新:我创建了两个重现问题的示例项目。请在此处找到它们以进行下载。
我不明白为什么会这样,但我找不到解决方案。
java - JavaFX 11 替换 column.impl_setWidth()?
我写了一个自定义的 TableColumn 宽度调整策略。你可以在 github 上看到它在 Java 8 / JavaFX 8 下的代码。如您所见,在方法distributeSpaceRatio()
和其他地方,取决于TableColumn.impl_setWidth()
在进行计算后将列的宽度设置为所需的值。
我正在将我的项目迁移到 Java 11 / JavaFX 11,并且该方法impl_setWidth()
已从公共视图中删除。
是否有另一种方法来告诉表格列设置其宽度?我对任何解决方案持开放态度,只要它是可靠的并将 with 设置为(或接近)请求的值。
以下是我迄今为止尝试过的两个无效的想法:
尝试1:
这给出了 NoMethodFoundException:
尝试2:
这个没有效果:
尝试 3:
查看 JavaFX's 的源代码TableView.UNCONSTRAINED_RESIZE_POLICY
,似乎调用的方法最终是TableColumnBase.doSetWidth()
,但这对我来说也不起作用:
尝试4:
我还尝试使用此答案中提供的解决方案来执行私有方法,并得到相同的异常 - “没有找到名称为 doSetWidth 和参数 [class java.lang.Double] 的方法”。
尝试 5:
我以为这个会起作用,但没有这样的运气。它抛出了“java.lang.NoSuchFieldException:width”。但是,当我转到 TableColumnBase 源代码时,我在第 412 行清楚地看到了一个名为 width 的私有字段。不知道为什么这会失败。
尝试 6:
这让我们更接近,但仍然失败:
java.lang.reflect.InaccessibleObjectException:无法将字段设为私有 javafx.beans.property.ReadOnlyDoubleWrapper javafx.scene.control.TableColumnBase.width 可访问:模块 javafx.controls 不会“打开 javafx.scene.control”到未命名的模块 @649dcffc
尝试 7:
java.lang.reflect.InaccessibleObjectException:无法使 void javafx.scene.control.TableColumnBase.setWidth(double) 可访问:模块 javafx.controls 不会“打开 javafx.scene.control”到未命名的模块 @5063f647