【发布时间】:2019-02-24 02:28:56
【问题描述】:
我在堆栈跟踪时遇到了这个奇怪的异常没有帮助或显示它来自哪里!!!!!!!!!。
我已经搜索了它和有用的结果,当框架所有者 alwaysOnTop 属性设置为 false 时,使用模态 JDialog 实例并使用 KeyListner 处理它时确实有相同的故障。
但就我而言,我根本没有使用任何对话框!这是异常堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:2062)
at java.awt.Component.getLocationOnScreen(Component.java:2036)
at javax.swing.text.JTextComponent$InputMethodRequestsHandler.getTextLocation(JTextComponent.java:4643)
at sun.awt.im.InputMethodContext.getTextLocation(InputMethodContext.java:278)
at sun.awt.windows.WInputMethod$1.run(WInputMethod.java:588)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我已经有一段时间没有使用这个应用程序了,我可以确认没有人弄乱代码,之前我在 linux 环境中开发应用程序并没有抛出那个异常,但是在更换了我的笔记本电脑和窗户的环境不知何故正在发生。 我需要尽快交付我的应用程序,这个异常有一个奇怪的事情,就是每次打开我的应用程序时都不会抛出它!而且我无法面对任何模式来注意到它何时会被抛出或什么特定的动作会做到这一点。 我想问的是,如果有人确实遇到了这样一个奇怪的案件,通常是什么?并提前致谢。
编辑
找到了解决方案!我刚刚在 bugzilla 发现它似乎是某种错误,当扩展 JRootPane 而没有在运行时的 Windows 中实现 RootPaneContainer 时:Java(TM) SE Runtime Environment 1.8.0_141-b15 with some gpu and方法相关的东西我无法理解,如果在使用对话框的默认 rootpane 按钮退出时,如果还使用了模式 JDialogs 而没有所有者始终位于顶部。
【问题讨论】:
-
您正在尝试获取文本组件的位置?
-
不,没有关于尝试获取任何组件的位置
-
it's not thrown every time i open my app- 应在事件调度线程 (EDT) 上创建和更新 Swing 组件,否则可能会产生随机结果。阅读Concurrency 上的 Swing 教程,了解更多信息和创建 GUI 正确方法的示例。 -
这是完整的堆栈跟踪吗?你的代码在哪里?
-
我们没有整晚的时间进行疯狂的猜测。开始做一些基本的调试。删除代码块,直到它开始工作。然后你知道你刚刚删除了什么并隔离了问题。然后你解决问题。或者您有有用的信息要添加到问题中。你已经得到了随机问题的主要原因。发布您的 minimal reproducible example 来证明问题。
标签: java swing exception environment