我有一个奇怪的异常,它是堆栈跟踪不帮助或显示它来自!!!!!!!!! 。
我正在搜索它,并与使用模态JDialog
实例并在框架拥有者KeyListner
拥有权时alwaysOnTop
进行处置时确实具有相同故障的某人进行有用的抢救设置为false。
但就我而言,我根本不使用任何对话框!!这是异常堆栈跟踪:
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环境中开发该应用程序的,但是并没有抛出该异常,但是在更换了笔记本电脑和Windows的环境以某种方式发生了。 我需要尽快交付我的应用程序,此异常有一个奇怪的事情,那就是每次我打开我的应用程序时都不会抛出该异常!而且我什么时候都不会注意到它会被抛出或什么具体的动作可以做到。 如果有人面对这样一个奇怪的案件,那是什么意思呢?并预先感谢。
修改
找到了解决方案!我只是在bugzilla上发现它的,似乎扩展了JRootPane
而没有在运行时的Windows中实现RootPaneContainer
时似乎是某种错误:Java(TM)SE运行时环境1.8.0_141-b15带有一些我无法理解的gpu和方法相关的东西,如果还使用模态JDialogs
,而使用对话框的默认rootpane按钮退出时,所有者始终不在最前面,则该模版会出现。
答案 0 :(得分:1)
我过去经常获得没有可跟踪堆栈跟踪的常规Swing #include <stdio.h>
int main(void)
{
printf("Concrete contains gravel and cement.\n");
return 0;
}
。这是因为我违反了有关Swing中并发性的规则。该SO答案详细说明:SwingWorker ProgressBar。基本上,请确保在事件调度线程上调用了所有Swing代码。