JavaFX 抛出 ArrayIndexOutOfBoundsException

2024-06-18

我正在尝试使用 JavaFX 标签和组,通过鼠标拖动将它们移动到屏幕上。新节点从某些线程添加到动画组中。 然而,有时我会突然看到以下异常 - 我假设,当某些节点重叠时。但我不知道问题是什么......因为我的代码不涉及。有谁知道这个异常和根本原因(使用JDK 1.8.0.-112)? 谢谢

'JavaFX Application Thread' lambda$main$68 - Thread[JavaFX Application Thread,5,main] threw an uncaught exception: java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(ArrayList.java:418) ~[?:1.8.0_112]
    at java.util.ArrayList.get(ArrayList.java:431) ~[?:1.8.0_112]
    at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89) ~[jfxrt.jar:?]
    at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306) ~[jfxrt.jar:?]
    at javafx.scene.Parent.updateCachedBounds(Parent.java:1591) ~[jfxrt.jar:?]
    at javafx.scene.Parent.recomputeBounds(Parent.java:1535) ~[jfxrt.jar:?]
    at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) ~[jfxrt.jar:?]
    at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) ~[jfxrt.jar:?]
    at javafx.scene.Node.updateGeomBounds(Node.java:3579) ~[jfxrt.jar:?]
    at javafx.scene.Node.getGeomBounds(Node.java:3532) ~[jfxrt.jar:?]
    at javafx.scene.Node.getLocalBounds(Node.java:3480) ~[jfxrt.jar:?]
    at javafx.scene.Node.updateTxBounds(Node.java:3643) ~[jfxrt.jar:?]
    at javafx.scene.Node.getTransformedBounds(Node.java:3426) ~[jfxrt.jar:?]
    at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) ~[jfxrt.jar:?]
    at javafx.scene.Parent.updateCachedBounds(Parent.java:1596) ~[jfxrt.jar:?]
    at javafx.scene.Parent.recomputeBounds(Parent.java:1535) ~[jfxrt.jar:?]
    at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) ~[jfxrt.jar:?]
    at javafx.scene.Node.updateGeomBounds(Node.java:3579) ~[jfxrt.jar:?]
    at javafx.scene.Node.getGeomBounds(Node.java:3532) ~[jfxrt.jar:?]
    at javafx.scene.Node.getLocalBounds(Node.java:3480) ~[jfxrt.jar:?]
    at javafx.scene.Node.impl_intersectsBounds(Node.java:5015) ~[jfxrt.jar:?]
    at javafx.scene.Parent.impl_pickNodeLocal(Parent.java:705) ~[jfxrt.jar:?]
    at javafx.scene.Node.impl_pickNode(Node.java:4914) ~[jfxrt.jar:?]
    at javafx.scene.Scene$MouseHandler.pickNode(Scene.java:3899) ~[jfxrt.jar:?]
    at javafx.scene.Scene$MouseHandler.access$1600(Scene.java:3485) ~[jfxrt.jar:?]
    at javafx.scene.Scene.pick(Scene.java:1942) ~[jfxrt.jar:?]
    at javafx.scene.Scene.access$6700(Scene.java:159) ~[jfxrt.jar:?]
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3799) ~[jfxrt.jar:?]
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) ~[jfxrt.jar:?]
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) ~[jfxrt.jar:?]
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) ~[jfxrt.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) ~[jfxrt.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) ~[jfxrt.jar:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_112]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) ~[jfxrt.jar:?]
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) ~[jfxrt.jar:?]
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) ~[jfxrt.jar:?]
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) ~[jfxrt.jar:?]
    at com.sun.glass.ui.View.notifyMouse(View.java:937) ~[jfxrt.jar:?]
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:?]
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]

我认为,它与 Label (=BorderPane) 添加方法有关。我引入它是为了缩短Java FX应用程序线程处理时间。这有问题吗?

private Queue<BacklogGroupAction> todoList = new ConcurrentLinkedQueue<>();

class BacklogGroupAction {
    boolean add;
    boolean visibleState;
    BorderPane dv;

    public BacklogGroupAction(boolean add, boolean visibleState, BorderPane dv) {
        this.add = add;
        this.visibleState = visibleState;
        this.dv = dv;
    }

}

private synchronized void processBacklogGroupList() {
    if (Platform.isFxApplicationThread()) {
        while (!todoList.isEmpty()) {
            BacklogGroupAction p = todoList.poll();
            if (p.add) {
                p.dv.setVisible(p.visibleState);
                backlogGroup.getChildren()
                .add(p.dv);
            } else
                backlogGroup.getChildren()
                .remove(p.dv);
        }
        backlogGroup.applyCss();
        backlogGroup.layout();
    } else
        logger.error("This is not FX Application Thread");
}

感谢你的帮助。 上面的“processBacklogGroupList”代码实际上是正确的并且有效......(那么为什么-1..?)

问题出在完全不同的地方,其中定义的动画不在 JFX 应用程序线程中运行 - 但稍后发生了异常。

感谢@sillyfly 指出了真正的问题

当尝试更改绑定到的 ObservableList 时,通常会发生这种情况 来自 JavaFX UI 线程以外的线程的节点,或者当 在更改期间操作列表。在这两种情况下通常都包裹 Platform.runLater 中的违规调用解决了问题。参见例如 这个相关问题。 ——sillyfly 6 月 27 日 10:03"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 抛出 ArrayIndexOutOfBoundsException 的相关文章

随机推荐

  • Elmah 不会在 MVC 应用程序中记录 http post 请求的异常 - 如果请求包含 XML

    我在 MVC4 RC 应用程序中遇到了一个奇怪的问题 在 NET 4 0上运行 我刚刚设置 Elmah 来记录异常 错误 我基本上安装了埃尔玛MVC and elmah sqlserverNuGet 包 分别为2 0 0和1 2版本 它似乎
  • OpenCV 2.4 Jpeg 到 PNG(带 alpha 通道)

    我有一个 JPEG 和一个蒙版 我想创建一个具有三个 JPEG 通道的 PNG 并且 Alpha 通道应该是蒙版 如何使用 OpenCV 实现这一目标 Regards std vector
  • 根据内容(行数)重置 JTable

    我有一个JTable在 JPanel 中 而 JPanel 又在Jframe The JTable从表中加载用户 数据库位于MySQL 我有一个使用的搜索引擎DNIs其中键对键 带有KeyTyped事件 正在更新表中的联系人 并仅显示符合浏
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • ionic:在哪里可以看到显示的控制台日志

    我是 ionic 新手 我正在关注离子框架文档 https ionicframework com docs api components action sheet ActionSheetController 去学习它 这是我的方法的代码 你
  • 将 CSS 网格中的文本放置在图像上方

    我有一个 CSS 网格 需要在图像上放置一些文本 下面显示了我使用的代码 图像上没有文字 sbp item12 grid row 6 7 grid column 9 13 height 250px div class sbp item12
  • 使用 C# 将 XML 转换为 BSON

    我想将 XML 文件转换为 BSON 然后将 BSON 导入 MongoDB 我进行了搜索 但找不到如何使用 C 来隐藏它 请向我提供使用 C 执行此操作的源代码 今天有同样的问题 这肯定不是最好的解决方案 但是 我在我的项目中以这种方式解
  • 如何在pygame中使球从三角形反弹?

    你好 我是一名相当新的程序员 我正在尝试让球从 45 度三角形反弹 这是我的代码 该程序使球在撞击窗户两侧时弹起 但我不知道如何使其从三角形弹起 import pygame importing the pygame import sys i
  • 如何通过API(最好使用flask-restplus)封送腌制对象?

    我有一个完整记录并完成的 API 使用 Flask restplus 在 python 3 5 flask 中构建 我想添加一大块功能 返回一个腌制对象作为我的响应的一部分 欢迎非特定于 Flask restplus 的通用解决方案 但由于
  • 将一个列表(n 元组或列表)与另一个列表(也可以是数组)缩放的惯用 F# 方法是什么?

    Given let weights 0 5 0 4 0 3 let X 2 3 4 7 3 2 5 3 6 我想要的是 wX 0 5 2 3 4 0 4 7 3 2 0 3 5 3 6 我想知道一种使用列表和数组来执行此操作的优雅方法 欢迎
  • 在模拟器/预览版上运行的 SwiftUI:切换不起作用,控制台日志:“无效模式‘kCFRunLoopCommonModes’”

    更新 这是一条红鲱鱼 所以我最初的问题是问如何禁用导航链接 并且仅在两个链接时才启用Toggle影响两个 State var isXYZToggleOn Bool属性都是true 这一直有效 我第一次尝试使用 disabled hasAgr
  • 将 JSON 集合发送到 ASMX Web 服务

    我有这门课 public class DesignElements public List
  • 使用 servicestack 提供静态文件

    我将如何使用 servicestack 提供静态文件 我想添加像 Routes Add app 这样的路由 当客户端为此路径发出 GET 时 我需要返回 silverlight xap 文件 ServiceStack 已经能够通过直接引用静
  • 如何在 IE8 中为两个字母的域设置 cookie?

    因为区分短域名和 TLD 并非易事 微软维护一个列表 http blogs msdn com b ieinternals archive 2009 09 19 private domain names and public suffixes
  • 参考装配错误

    我已经实现了 RoleProvider 类 在那里我创建了位于另一个程序集中的 Domain 类对象 我的程序集具有对该程序集的引用 错误 3 类型 System Data Entity DbContext 是在 未引用的程序集 您必须添加
  • 如何在iOS中查找文本段范围

    如何在 iOS 中找到文本段 又名代码段 范围 意思是 文本段的起始地址和结束地址是多少 I found 这个有趣的帖子 http www pschweitzer fr p 12但它适用于 Android 但不适用于 iOS 经过一些挖掘和
  • grpc 活跃客户端/通道数量

    我正在实现一个简单的 grpc 服务发现 我想做的一件事是跟踪当前有多少客户端使用该服务 并且该服务会将其报告给服务注册表 grpc server api 是否提供此类信息 我在这里遇到了一个有点类似的问题 https github com
  • 矢量之间的碰撞检查 - 移动矢量 - HTML、JS、P5

    我为我的玩家创建了碰撞检查功能 每次当对象 在本例中为矢量 圆 接触玩家 也是矢量 圆 时 游戏就会结束 我已经成功创建了一个逻辑 并且有一个碰撞检查正在工作 但是它并没有计算元素之间的实际距离 而不是当它们彼此相距一定距离时实际触及其结局
  • 如何将图像转换为纹身? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我后来正在使用纹身应用程序 因为我需
  • JavaFX 抛出 ArrayIndexOutOfBoundsException

    我正在尝试使用 JavaFX 标签和组 通过鼠标拖动将它们移动到屏幕上 新节点从某些线程添加到动画组中 然而 有时我会突然看到以下异常 我假设 当某些节点重叠时 但我不知道问题是什么 因为我的代码不涉及 有谁知道这个异常和根本原因 使用JD