Java 如何有效地查找Graphics2D渲染错误?

Java 如何有效地查找Graphics2D渲染错误?,java,swing,debugging,netbeans,graphics2d,Java,Swing,Debugging,Netbeans,Graphics2d,您能建议一种从调试器中识别呈现错误源的方法吗 Misko Hevery将缺陷分为三类: 合乎逻辑 接线 渲染 很明显,我的问题是一个渲染错误 我有一个Swing应用程序,它的面板包含多个层。渲染所有层可能需要大量时间,因此应用程序使用线程池将层和分片从层渲染到BuffereImage。当事件调度线程渲染面板时,最新渲染的缓冲区图像将被绘制到屏幕上 此设置已充分执行 新功能要求特定图层类型支持透明度。有些东西,有些地方不能保持透明度。错误可能在许多地方,可能在要渲染的对象的实现中,也可能在脱机

您能建议一种从调试器中识别呈现错误源的方法吗

Misko Hevery将缺陷分为三类:

  • 合乎逻辑
  • 接线
  • 渲染
很明显,我的问题是一个渲染错误

我有一个Swing应用程序,它的面板包含多个层。渲染所有层可能需要大量时间,因此应用程序使用线程池将层和分片从层渲染到BuffereImage。当事件调度线程渲染面板时,最新渲染的缓冲区图像将被绘制到屏幕上

此设置已充分执行

新功能要求特定图层类型支持透明度。有些东西,有些地方不能保持透明度。错误可能在许多地方,可能在要渲染的对象的实现中,也可能在脱机渲染线程实现中。EDT渲染代码中可能没有将多个BuffereImage正确组合在一起

我没有要求任何人查看代码并告诉我错误在哪里

我想知道的是,人们发现哪些技术在解决Graphics2D渲染问题时特别有效

我非常支持单元测试,但我更愿意从另一种技术开始

是否有方法或技巧从调试器中目视检查BuffereImage或Graphics2D对象

在Netbeans变量和监视窗口中,Netbeans有时使用PropertyEditor显示变量值。在此示例图像中,foregroundColor和backgroundColor的值显示为颜色值的小样例

是否有一种简单的方法来添加/启用Netbeans PropertyEditor,该编辑器将显示BuffereImage的内容

我可以临时在代码中添加方法调用,将遇到的各种BuffereImage写入磁盘,以便脱机检查它们。它可能会工作,但将磁盘上的文件与源代码进行匹配会很乏味


您会怎么做?

您可以将您的方法与所示的清除缓冲区的方法进行比较:

g2d.setComposite(AlphaComposite.Clear);
g2d.fillRect(0, 0, w, h);

在最坏的情况下,您可以在可以访问
图像的点中断,并在表达式
image.getRGB(0,0)
上设置一个手表,显示设置为十六进制。高阶字节是
alpha
值:
FF
是不透明的,
00..FE
表示不同的透明度。

您为
buffereImage
指定的类型是什么?实现这一点并不容易,我会首先减少渲染的层数,并允许检查每一层。我可能会把一些写在磁盘上,我甚至可以考虑看一下,@ MadProgrammer有很多缓冲区,但是它们都是这样创建的:代码>缓冲区MFBuffeDime=新的缓冲区((int)d GigWithTh),(int)d GeTeAuthe(),BuffeReimdia.Type In IsAgARB);代码>您的第一个建议-我将其解释为“寻找偏离已知工作模式的代码”是一个很好的建议。问题是有相当多的棘手代码需要检查。我相信你的第二个建议本质上是“不要检查整个图像。注意单个已知像素的透明度。”我认为对于我的情况,这是一个更好的建议。对;您需要根据图像推断要检查的角点;当您捕捉到坏帧时,您可能会发现试图使用不透明颜色和/或错误模式进行清除。