JavaFX 绑定失败并显示“无法绑定到无类型对象”。

2024-06-25

我有一个定义 JavaFX 用户界面的 FXML 文件。在 FXML 文件中,我有以下内容:

...
<Checkbox fx:id="myCheckbox" ... />
<Spinner disable="${myCheckbox.selected}" ... />
...

当我尝试使用以下代码加载 FXML 文件时,我得到一个javafx.fxml.LoadException与消息

无法绑定到无类型对象。

final Class<?> controllerClass = ...;
final FXMLLoader fxmlLoader = new FXMLLoader();
final String fxmlPath = controllerClass.getSimpleName() + ".fxml";
try (final InputStream fxmlStream = controllerClass.getResourceAsStream(fxmlPath)) {
    fxmlLoader.load(fxmlStream);
    final Object controller = fxmlLoader.<Object>getController();
    return controller
}

有谁知道如何修改 FXML 以在选中复选框时禁用我的微调器?我知道如何在代码中实现此目的,但想了解有关 FXML 语法的更多信息。我还应该补充一点,当我从 FXML 中删除尝试的属性绑定时,所有内容都会按预期加载。谢谢。

EDIT

由于 @Groostav 的评论说这一定是...在代码的一部分中,我想出了一个最小的、可重现的示例。在我的示例中,有两个文件,我将在此处完整复制它们。

主要.java:

package test;

import java.io.InputStream;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage window) throws Exception {
        final FXMLLoader fxmlLoader = new FXMLLoader();
        final String fxmlPath = "Example.fxml";
        final Parent root;
        try (final InputStream fxmlStream = getClass().getResourceAsStream(fxmlPath)) {
            root = (Parent)fxmlLoader.load(fxmlStream);
        }
        final Scene scene = new Scene(root);
        window.setScene(scene);
        window.show();
    }
}

示例.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.layout.HBox?>

<HBox xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"
      alignment="BASELINE_LEFT" spacing="15">
  <children>
    <CheckBox fx:id="myCheckbox" text="Disable?" mnemonicParsing="false" />
    <Spinner disable="${myCheckbox.selected}" />
  </children>
</HBox>

当我运行 main 方法时,我得到以下输出:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: Cannot bind to untyped object.
unknown path:12

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597)
    at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$Element.processPropertyAttribute(FXMLLoader.java:299)
    at javafx.fxml.FXMLLoader$Element.processInstancePropertyAttributes(FXMLLoader.java:235)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:749)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
    at test.Main.start(Main.java:22)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    ... 1 more
Exception running application test.Main

如果我删除disable="${myCheckbox.selected}"从 FXML 文件来看,一切都按预期加载。此外,我可以在代码中绑定属性。为什么这不起作用?如何修改 FXML 以支持此功能?我在 Windows 7 Enterprise SP1 x64 上运行,使用 Java SE JDK 8u92 x64。


看来您无法通过这种方式使用 FXML 在 Spinner 上设置禁用属性。它在文本字段上运行良好。这可能是一个错误,我猜想这与加载程序期望定义 ValueFactory 的 Spinner 标记的主体有关,因此当尝试将 CheckBox 状态链接到禁用属性时,Spinner 没有正确定义。

以下解决方法可能会有所帮助:

<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.util.* ?>
<?import javafx.scene.*?>
<?import javafx.scene.control.* ?>
<?import javafx.scene.layout.* ?>
<?import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory?>

<HBox xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"
      alignment="BASELINE_LEFT" spacing="15">
    <fx:script>
    function handleCheckBoxAction(event) {
       mySpinner.disable = (! mySpinner.disabled);
    }
    </fx:script>
  <children>
    <CheckBox fx:id="myCheckbox" text="Disable?" mnemonicParsing="false" onAction="handleCheckBoxAction(event);" />
    <Spinner fx:id="mySpinner">
        <valueFactory>
        <SpinnerValueFactory.IntegerSpinnerValueFactory min="0" max="10"/>
      </valueFactory>
    </Spinner>
  </children>
</HBox>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 绑定失败并显示“无法绑定到无类型对象”。 的相关文章

  • 多线程以原子方式对大量值求和

    我正在开发一个应用程序 其中有大量线程 并且必须自动添加 100 个值 我在用AtomicLong效果很好 但仍需要提高性能 有没有比 AtomicLong 提供更好性能的东西 您可以使用长加法器 https docs oracle com
  • Eclipse + Spring Boot 中“抛出 new SilentExitException()”处的断点

    每次我在 Eclipse IDE Spring Tool Suite 中以调试模式运行 Spring Boot 项目时 线程都会停止在throw new SilentExitException 即使没有断点也行 有什么解决方案可以避免这种行
  • Java无法读取字体

    好的 我在使用自定义字体时遇到问题 基本上我得到了从互联网上下载的自定义字体并在我的程序中使用它 当我在 Eclipse 我使用的编辑器 中运行该程序时 一切正常 没有问题 但是 每当我将它从 eclipse 导出到 jar 时 或者尝试从
  • 有没有办法获取 JList 中的所有元素?

    我想知道是否有一种方法可以检索已添加到 JList 的所有元素的列表 例如 我希望 JList 从自定义单元格渲染器返回字符串或 JLabels 的数组或列表 您可以使用getModel http docs oracle com javas
  • 使用 org.eclipse.xsd 和 Maven2 分析 XML 模式

    我正在尝试实现示例代码本文 http help eclipse org help32 index jsp topic org eclipse xsd doc references articles dwtip1 scpw index htm
  • 在java中将HTML转换为RTF?

    我需要将 HTML 转换为 RTF 我正在使用以下代码 private static String convertToRTF String htmlStr OutputStream os new ByteArrayOutputStream
  • java中简单程序中的“未为类型定义方法”错误

    所以我只是想学习 Java 在观看了一些教程并阅读了一些基本内容之后 我对为什么它无法运行感到困惑 package Test public class TestProg public static void main String args
  • 改进 Java 8 查找“战争与和平”中最常见单词的方法

    我在理查德 伯德的书中读到这个问题 Find the最常用的五个词 in 战争与和平 http www gutenberg org ebooks 2600 或与此相关的任何其他文本 这是我当前的尝试 public class WarAndP
  • Run As JUnit 未出现在 Eclipse 中 - 使用 JUnit4

    我正在尝试为我的 Web 应用程序编写 JUnit4 测试 它们之前一直工作正常 但是 现在当我尝试通过右键单击类文件 gt Run As gt JUnit Test 来运行测试时 我看不到该选项 我认为这可能是因为一位同事意外提交了一些
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • 获取 Spring Boot 中当前活动数据源的引用

    我想通过实现数据库数据初始化DataSourceInitializer 我将这些方法放在我的 Spring Boot 主方法下面 但似乎它根本没有被执行 我尝试故意删除字符只是为了触发一个错误来确认执行 什么也没有发生 Configurat
  • double 或 BigDecimal 会溢出吗?

    Java 8 给了我们Math addExact https docs oracle com javase 8 docs api java lang Math html addExact int int 适用于整数 但不适用于小数 是否有可
  • Apache HTTPClient SSLPeerUnverifiedException

    使用 Apache HttpClient 4 2 1 使用从基于表单的登录示例复制的代码 http hc apache org httpcomponents client ga examples html http hc apache or
  • 面临 process.start(); 的问题在 Android 棒棒糖中

    面临一个问题process start 在 Android 棒棒糖中 我在服务中遇到了 android lollipop 后台进程的问题 我的代码在 KitKat 之前工作正常 我有一个ProcessBuilder pBuilder并向其中
  • JRuby调用了错误的方法

    我在调用 Java 方法时遇到了一个奇怪的问题JRuby http en wikipedia org wiki JRuby 在我的 Java 类中 这些方法定义了两次 看来 JRuby 调用了错误的方法 所以我尝试使用java method
  • 在同步子句中抛出异常的副作用?

    从同步子句中抛出异常是否有任何不清楚的副作用 锁会发生什么情况 private void doSomething throws Exception synchronized lock doSomething 我没有看到任何副作用 The 锁
  • SwingWorker 和 Executor 的区别

    我正在使用 SwingWorker 在我正在制作的应用程序上执行一些重负载任务 虽然今天我遇到了 Executor 类和这个例子 Executors newCachedThreadPool execute new Runnable publ
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • 解决SecurityException:权限拒绝:启动意图。我需要什么许可?

    我想从应用程序打开游戏商店 在三星手机上还好 但在一加手机上却失败了 我不知道在哪里alibaba来自 真奇怪 异常 java lang SecurityException 权限拒绝 启动意图 act android intent acti
  • JFrame.repaint() 和 JPanel.repaint() 之间的区别

    谁能解释一下两者之间的区别JPanel repaint 方法和JFrame repaint 方法 我想两者都调用paintComponent JPanel 中的方法 请澄清 谢谢 Calling repaint 在任何组件上都会向重绘管理器

随机推荐

  • GDI+支持图形加速吗?

    我正在尝试使用 C 和 Win API 为 Windows 平台编写屏幕保护程序 为了渲染图形 我使用 GDI 但问题是渲染带有少量动画 淡入和淡出 的 png 变得非常 CPU 繁重 所以我想知道是否有办法为 GDI API 启用 GPU
  • 使用 NetworkStream.WriteAsync 检测错误

    如果我在调用后杀死我的服务器Login完成后 调用时不会引发异常stream WriteAsync data 0 data Count 已完成 并且返回的任务中没有错误指示 那么 我应该如何检测错误呢 当然 应该有一些迹象表明我试图通过已挂
  • 在 JavaScript 中查找内容是否具有当前网站 url

    我正在使用 TinyMCE 作为编辑器 我想执行移动验证和 URL 验证 什么是不允许的 描述中不允许输入手机号码 仅允许在描述框中输入相同的应用程序 URL 如果用户输入其他网站网址 则会引发验证错误 我使用下面的代码来验证移动设备和 u
  • 是否可以从父级覆盖 iFrame 中的 javascript?如果是这样怎么办?

    我在我们的一款触摸屏应用程序中使用 Telerik RadSpell 控件 我已经设法将其样式设置得恰到好处 但是该死的东西使用 window alert 和 window confirm 来提示用户是否想要保留更改等 我想禁用这些警报 而
  • 将 Linq to SQL 代码迁移到 .Net Core

    我们有一些使用 Linq to SQL 作为 ORM 的遗留代码 我们希望将此逻辑迁移到 Net Core 以便我们可以将其放置在 Linux 服务器上 据我所知 L2S 不包含在 Net Core 中 阻力最小的迁移路径是什么 如果您使用
  • 将巨大的 xml 参数传递给存储过程的最佳方法

    实际上我正在尝试通过一个巨大的Xml到我的存储过程 但我总是得到一个输出of memory exception 因为我想通过string其大小限制为 2G 那么这样的事情有没有办法呢 不要使用XmlDocument 将 DOM 完全加载到内
  • 在 WebView 中捕获 Flash 内存不足错误?

    当加载某些 swf文件到一个WebView 在 Flash 文件开始显示后的一瞬间 我的应用程序因 Signal 11 故障而关闭 我看不到任何异常 LogCat 转储示例位于此处 http pastebin com drx0ckT9 加载
  • 由于某种原因,reCaptcha 呈现在最右下角

    我的 ajax 表单带有 recaptcha 简化的代码
  • 如何确定卷是否支持垃圾箱?

    我正在编写一个将删除文件的应用程序 如果该卷支持 垃圾箱 文件夹 我想将文件移动到那里 否则只需删除它们 这可能只是我的搜索魔力让我失败 但我找不到如何做到这一点 这里的目的是做类似的事情 伪代码 if itemURL on volume
  • Web Api 2 Post - UrlHelper.Link 不得返回 null

    我有一个基本的 Web API 2 设置和一些基本的路由 以下是插入的默认路线和帖子 当我调用该帖子时 记录已在数据库中完美创建 但 CreatedAtRoute 调用返回 500 错误 指出 ExceptionMessage UrlHel
  • 不明确的类型变量

    相关我之前关于遍历数据结构的问题 https stackoverflow com questions 1855371 avoiding boilerplate when dealing with many unrelated types 当
  • 如何在 MacOS 上的 MARS 中打开保存的 .asm 文件

    我是 MIPS 的新手 我找不到如何打开我保存的文件 我在下载文件夹下保存了 asm 文件 但是当我尝试在 MARS 中打开文件并导航到同一下载文件夹时 asm 文件不会出现 我在 MacOS 上使用 MARS 如上所述 您需要在 macO
  • java.lang.ClassNotFoundException:sun.misc.Cleaner

    当使用 Undertow 1 4 20 作为嵌入式 Servlet 引擎 时 在 Java 9 下运行我们的应用程序时出现此异常 java lang ClassNotFoundException sun misc Cleaner 原因是这条
  • 使用 Java 创建 plist

    有没有一种简单的方法可以用Java创建plist 结果应该与 Objective C 中序列化字典相同 The PList http code google com p xmlwise source browse trunk src mai
  • 为什么在 haskell 中不带括号不可能进行负数相乘

    乘法5 3在 haskell gchi 中给了我一个错误 但乘以5 3 工作正常 为什么需要括号 ghci GHCi version 7 4 1 http www haskell org ghc for help Loading packa
  • Nativescript:使用 Sidekick 传输 mp3 文件

    我正在制作一个使用 nativescript audio 的简单应用程序 我想在该应用程序中播放一些 mp3 样本 问题是 当我在 Sidekick 中单击 在设备上运行 时 它不会传输我包含在应用程序文件夹中的任何 mp3 文件 因此我无
  • CSS 选择包含加号“+”的类

    如何通过包含加号的类名选择元素 E g frme 150 1 background position 150px 1px 使用JavaScript改变加值 可以使用吗 选择器名称中的字符 你需要escape http mathiasbyne
  • 使用 PowerShell 复制源服务器同一目录结构中的文件夹和子文件夹中的项目文件

    我正在努力让下面的脚本以正确的结构复制文件夹和子文件夹中的文件 作为源服务器 可以说 有下面提到的文件夹 主文件夹 文件aaa 文件bbb 子文件夹a 文件1 文件2 文件3 子文件夹b 文件4 文件5 文件6 使用的脚本 Get Chil
  • jquery 淡入淡出滑动面板

    我创建了一个小例子 请看一下 http jsfiddle net bWTwL http jsfiddle net bWTwL 我想要一个像这样的面板 以便 1 li home 点击 gt 向左滑动面板 gt 内容淡入 2 X 单击 gt 内
  • JavaFX 绑定失败并显示“无法绑定到无类型对象”。

    我有一个定义 JavaFX 用户界面的 FXML 文件 在 FXML 文件中 我有以下内容