gpt4 book ai didi

java - 使用 UISpec4j 的 ClassCastException

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:10 27 4
gpt4 key购买 nike

我有时会看到以下堆栈跟踪运行使用 UISpec4j 构建的测试

java.lang.ClassCastException: org.uispec4j.interception.toolkit.Empty$DummyGraphics2D cannot be cast to sun.java2d.SunGraphics2D
at java.awt.Component$BltBufferStrategy.getDrawGraphics(Component.java:4348)
at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:522)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:276)
at javax.swing.RepaintManager.paint(RepaintManager.java:1265)
at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
at javax.swing.JComponent.paintImmediately(JComponent.java:4990)
at javax.swing.AbstractButton.doClick(AbstractButton.java:371)
...

根本原因似乎是顽皮的 JDK 代码在 java.awt.Component.BltBufferStrategy.getDrawGraphics() 中向下转换为 SunGraphics2D 而不是 java.awt.Graphics2D

    /**
* @return the draw graphics
*/
public Graphics getDrawGraphics() {
revalidate();
Image backBuffer = getBackBuffer();
if (backBuffer == null) {
return getGraphics();
}
SunGraphics2D g = (SunGraphics2D)backBuffer.getGraphics();
g.constrain(-insets.left, -insets.top,
backBuffer.getWidth(null) + insets.left,
backBuffer.getHeight(null) + insets.top);

我做错了什么吗,因为我在其他地方找不到任何对此的引用..?

解决方法?我所能想到的就是在测试中吞掉异常,这并不理想。

最佳答案

这似乎是 JDK 的一个未记录的功能,仅当与 UISpec4J 测试框架一起使用不同的 Graphics2D 实现时才会公开

进一步调试表明,这种情况仅发生在某些使用加速的平台上。如果启用双缓冲,则通过 javax.swing.JComponent._paintImmediately(int, int, int, int) 的路线会有所不同,则会引发异常

作为解决方法,可以通过以下方法禁用此功能,以避免出现异常

RepaintManager.currentManager(null).setDoubleBufferingEnabled(false);

关于java - 使用 UISpec4j 的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42882626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com