Swing JTabbedPane 在填充时抛出 IndexOutOfBoundsException

2023-12-06

我有一个包含多个组件的应用程序。其中之一是JTabbedPane里面还有其他东西(显然)。我访问此窗格only通过这个吸气剂:

public JTabbedPane getPlotTabbedPane() {
    if (plotTabs == null) {
        plotTabs = new JTabbedPane();
        plotTabs.setFocusable(false);

        plotTabs.add("Measurement", getPlotPanel());
        plotTabs.add("Time", getPlotPanel().getTimePanel());
        plotTabs.add("Data", getPlotPanel().getDataPanel());
        plotTabs.add("Statistics", getPlotPanel().getStatisticsPanel());
        plotTabs.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                getPlotPanel().refreshRenderer();
            }
        });
    }
    return plotTabs;
}

所以第一次,我访问它(即,当它尚未创建时),我创建它,所有其他时间,我只是返回已经创建的JTabbedPane。我已经被告知这不是最好的技术(如果有人可以告诉我一种更好的技术,不会弄乱布局组合代码,我非常愿意接受建议)。

现在,这在 99% 的情况下(应用程序启动)都可以正常工作。在 1% 中我得到

Exception in thread "Thread-0" java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.Vector.elementAt(Vector.java:430)
    at javax.swing.JTabbedPane.getTitleAt(JTabbedPane.java:1091)
    at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.updateHtmlViews(BasicTabbedPaneUI.java:3564)
    at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.componentAdded(BasicTabbedPaneUI.java:3699)
    at java.awt.Container.processContainerEvent(Container.java:2065)
    at java.awt.Container.processEvent(Container.java:2036)
    at java.awt.Component.dispatchEventImpl(Component.java:4653)
    at java.awt.Container.dispatchEventImpl(Container.java:2097)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.Container.addImpl(Container.java:1083)
    at javax.swing.JTabbedPane.insertTab(JTabbedPane.java:703)
    at javax.swing.JTabbedPane.addTab(JTabbedPane.java:777)
    at javax.swing.JTabbedPane.add(JTabbedPane.java:814)
    at companyname.product.gui.Tab.getPlotTabbedPane(Tab.java:386)
    at companyname.product.gui.Tab.getFullPlotPanel(Tab.java:374)
    at companyname.product.gui.Tab.initComponents(Tab.java:262)
    at companyname.product.gui.Tab.<init>(Tab.java:80)

我不会进一步深入堆栈,但这基本上是 GUI 的创建。Tab是一个扩展的JPanel。我真的不知道问题是什么,也不知道我能做些什么来预防它。显然,我可以将 Tab.java 的第 386 行包装在try/catch,但这并不能解决问题,它只是解决了症状......

那么,您知道问题是什么、我该如何解决它或者我应该如何做这些事情吗?


堆栈跟踪似乎建议您从另一个线程(然后是事件调度线程 (EDT))访问 Swing 组件。这是不允许的。

我非常确定,如果您确保只从正确的线程访问 Swing 组件,您将不会再看到此异常。

更多信息可以在Swing 中的并发教程。您还可以看看本文其中包含一个RepaintManager它可以帮助您检测 Swing 线程违规

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

Swing JTabbedPane 在填充时抛出 IndexOutOfBoundsException 的相关文章

  • 在 Java 和 C 中在运行时调用名为“string”的方法

    我们如何调用名称为的方法string在运行时 谁能告诉我如何在 Java 和 C 中做到这一点 在java中可以通过反射api来完成 看一下Class getMethod String methodName Class parameterT
  • Spring 可以理解 @Inject 替换 Weld 作为 JSR-299 实现吗?

    我从几个网页中注意到 Spring 3 0 显然支持来自 JSR 330 的 Inject 由于我们确实希望在 Web 应用程序和独立应用程序的库中使用 JSR 299 语法进行依赖项注入 并且有 Weld 的替代方案 因此如果 Sprin
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • SwingWorker 在 Unsafe.park() 处挂起

    我有一个SwingWorker与后台服务器通信 然后更新JFrame 我正在调试我的应用程序并注意到即使在SwingWorker完成了它的工作 它的线程仍然存在 它挂在Unsafe park java lang Object 这是一个本机方
  • 全屏独占模式下的 AWT 框架在窗口弹出对话框中最小化

    我正在开发一个在全屏独占模式下使用 awt 框架的应用程序 一切正常 直到弹出窗口可见 这会抢走焦点 我的应用程序将被最小化 这是我的框架的初始化代码 if ApplicationConfig getInstance useFullscre
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • 找不到模块:javafx.controls

    我已经下载了JavaFX SDK 解压它并设置PATH TO FX系统变量 如下本说明 https openjfx io openjfx docs install javafx 我使用了以下代码示例 import javafx applic
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • 使用 java.nio.file.Paths 接口时缺少方案(IllegalArgumentException)

    这是一个非常简单的java问题 我在 Linux 系统上使用 Java 8 和 eclipse kepler 我一直在尝试尝试NIO 2 我的代码是 package lucasTest import java io IOException
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • Hibernate3:自引用对象

    需要一些帮助来了解如何执行此操作 我将在文件系统上运行递归 查找 并且希望将信息保留在单个数据库表中 具有自引用的层次结构 这是我想要填充的数据库表结构 目录对象表 id int NOT NULL name varchar 255 NOT
  • Spark toLocalIterator 和迭代器方法之间的区别

    在编写 Spark 程序时我遇到了这个toLocalIterator 方法 之前我只使用iterator method 如果有人曾经使用过这种方法 请点亮 我在使用时遇到foreach and foreachPartitionSpark程序
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • Ant 类路径和 junit.jar

    我有一个 build xml 它允许我运行 junit 测试 这是相关部分
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f

随机推荐

  • UIKeyboardWillHide 未触发

    我在这里读了很多关于这个主题的帖子 但我无法找到我的问题的答案 所以 希望你不会对另一篇 UIKeyboard 帖子感到无聊 在我的视图控制器的实现中我添加了self作为两个通知的观察员UIKeyboardWillShowNotificat
  • 如何使用RecyclerView构建水平ListView

    我需要在我的 Android 应用程序中实现水平列表视图 我做了一些研究并发现如何在Android中制作水平ListView and Android 中的水平 ListView 然而 这些问题在 Recyclerview 发布之前就被提出了
  • Swift - 将 JSON 日期转换为 Swift 兼容日期

    我正在尝试转换一个日期 其中 javascript 代码使用 Date 函数生成当前日期 但当我打印出来时 我得到的是零 my code let date2 data 0 as String println date2 var str 20
  • 防火墙应允许哪些端口使用 TURN 服务器?

    我想在我们公司的服务器上设置一个turn服务器 coturn 而且我不确定外部访问应该允许哪些端口 8443是必须的 使用WebRTC 3478 是凭证使用的必备条件 但是 TURN 服务器使用的端口有无数个 是否需要在防火墙中允许它们 或
  • SASS:循环内部属性

    我想为单个属性生成多个值 background image radial gradient circle primary 10 transparent 10 radial gradient circle primary 10 transpa
  • Python连续TCP连接

    我是套接字编程新手 并试图重新回到Python 我想编写一个简单的 TCP 程序 它将持续维护连接 直到达到某个结束状态 在这种情况下 客户端发送 关闭 这对于第一次迭代来说效果很好 但是在我发送的第二件事上它冻结了 我不确定为什么 有人可
  • 二进制到 Base64 (Delphi)

    我怎样才能获得内容exe文件并将其转换为Base64编码 Edit I use D2010我想知道这到底是怎么可能的 open an exe file convert its content into base64 在Delphi 2009
  • 无法将“User”分配给 FutureBuilder 中的参数类型“Future

    我试图确定用户是否使用 FirebaseAuth instance currentUser 登录 Flutter Firebase 然后返回 LoginScreen 或 Dashboard 但出现错误 我尝试根据 FirebaseFlutt
  • 在运行时更改 IconTintColorBehavior 的 TintColor 不起作用

    你好 我正在测试新的IconTintColorBehavior在 CommunityToolkit Maui 1 1 0 中 它可以查找 但仅在启动应用程序时有效 如果我改变AppTheme在运行时 它不起作用 还有其他人观察过这种行为吗
  • 滑动功能无法使用 jquerymobile 和 android 的phonegap 工作

    我是phonegap的新手 我正在使用phonegap for android在eclipse中创建应用程序 我在xml文件夹中添加了phonegap jar和插件 我还添加了jquery库和phonegap1 1 0 js 我正在尝试实现
  • 在python中生成正弦波声音

    我一直在尝试使用以下代码生成正弦波并在我的扬声器中播放它 但这听起来很糟糕 有人知道为什么吗 听起来不像正弦波 dur int FS float duration 1000 for i in range dur a frequency i
  • 连接到服务器上运行的 virtualenv/django 时如何解决 ERR_CONNECTION_REFUSED

    我已经在 ubuntu 服务器上的用户部分安装了 virtualenv 和 Django 一切似乎都安装正确 当我启动服务器时python manage py runserver我收到以下消息 这似乎是正确的 Performing syst
  • 以绘图单位指定 matplotlib 散点大小

    我想不使用点或像素而是使用绘图单位来指定散点大小 以下面为例 import matplotlib pyplot as plt x 0 y 0 plt scatter x y plt show 这会产生如下图 比如说 如果我希望标记的半径恰好
  • Ansible 将多个异步任务注册到同一变量

    有没有办法将多个异步任务注册到同一个变量 例如 如果我有两个任务 每个任务都调用异步 shell 命令 name Run async task 1 shell echo task 1 async 30 poll 0 register db
  • 如何检测圆形视图内的触摸

    我有一个圆形的 UIView 我必须仅检测紫色圆圈内的触摸 所有在圆圈外的触摸 例如黑色方块和白色背景必须被忽略 设置半径和检测触摸将没有任何用处 因为当多个视图使用不同的控制器彼此重叠时 将很难管理 有什么办法吗 我可以做到这一点 请您给
  • 无法在 iOS 应用程序中使用自定义字体

    我正在尝试为我的 iOS 应用程序使用自定义字体 这就是我所做的 我将自定义字体 m tff 添加到 Xcode 支持文件目录 此外 我还在 myApp plist 中创建了应用程序提供的名为 Fonts 的条目 其中包含字体的值名称 m
  • 如何在 .NET 中将 HTML 转换为 RTF(富文本)而无需支付组件费用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有免费的第三方或 NET 类可以将 HTML 转换为 RTF 用于支持富文本的 Windows 窗体控件 免费 要求来自这样一个事实 我只在开发
  • 动态添加节点到 d3.js 力向图

    我在动态添加节点到 d3 js 强制定向图时遇到问题 我想知道这里是否有人可以阐明这个主题 我遇到的问题是我希望刻度函数进行转换all图上的节点而不仅仅是新添加的节点 以下是我用于添加节点和处理转换的函数 Function to handl
  • Google App Engine“没有名为请求的模块”PyDev

    我下载并安装了requestsPython 2 7 的库 使用 shell 我可以发出 导入请求 并实际使用它 不会出现任何问题 问题是 运行 Google App Engine 时找不到它并提示错误 导入错误 没有名为请求的模块 我使用
  • Swing JTabbedPane 在填充时抛出 IndexOutOfBoundsException

    我有一个包含多个组件的应用程序 其中之一是JTabbedPane里面还有其他东西 显然 我访问此窗格only通过这个吸气剂 public JTabbedPane getPlotTabbedPane if plotTabs null plot