修复Graphics2D的资源没释放问题

This commit is contained in:
Looly 2024-03-15 17:03:39 +08:00
parent 03891277e9
commit 9a3d6857db
5 changed files with 57 additions and 43 deletions

View File

@ -234,7 +234,7 @@ public class ULID implements Comparable<ULID>, Serializable {
* @param timestamp 时间戳 * @param timestamp 时间戳
*/ */
private static void checkTimestamp(final long timestamp) { private static void checkTimestamp(final long timestamp) {
Assert.isTrue((timestamp & TIMESTAMP_MASK) == 0), "ULID does not support timestamps after +10889-08-02T05:31:50.655Z!") Assert.isTrue((timestamp & TIMESTAMP_MASK) == 0,
; "ULID does not support timestamps after +10889-08-02T05:31:50.655Z!");
} }
} }

View File

@ -85,11 +85,15 @@ public class CircleCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE));
try{
// 随机画干扰圈圈 // 随机画干扰圈圈
drawInterfere(g); drawInterfere(g);
// 画字符串 // 画字符串
drawString(g, code); drawString(g, code);
} finally {
g.dispose();
}
return image; return image;
} }

View File

@ -13,9 +13,9 @@
package org.dromara.hutool.swing.captcha; package org.dromara.hutool.swing.captcha;
import com.madgag.gif.fmsware.AnimatedGifEncoder;
import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.ObjUtil;
import org.dromara.hutool.core.util.RandomUtil; import org.dromara.hutool.core.util.RandomUtil;
import com.madgag.gif.fmsware.AnimatedGifEncoder;
import org.dromara.hutool.swing.captcha.generator.CodeGenerator; import org.dromara.hutool.swing.captcha.generator.CodeGenerator;
import org.dromara.hutool.swing.captcha.generator.RandomGenerator; import org.dromara.hutool.swing.captcha.generator.RandomGenerator;
@ -183,6 +183,7 @@ public class GifCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//或得图形上下文 //或得图形上下文
final Graphics2D g2d = image.createGraphics(); final Graphics2D g2d = image.createGraphics();
try{
//利用指定颜色填充背景 //利用指定颜色填充背景
g2d.setColor(ObjUtil.defaultIfNull(this.background, Color.WHITE)); g2d.setColor(ObjUtil.defaultIfNull(this.background, Color.WHITE));
g2d.fillRect(0, 0, width, height); g2d.fillRect(0, 0, width, height);
@ -208,7 +209,9 @@ public class GifCaptcha extends AbstractCaptcha {
);//绘制椭圆边框 );//绘制椭圆边框
g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y); g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y);
} }
} finally {
g2d.dispose(); g2d.dispose();
}
return image; return image;
} }

View File

@ -77,11 +77,15 @@ public class LineCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE));
try{
// 干扰线 // 干扰线
drawInterfere(g); drawInterfere(g);
// 字符串 // 字符串
drawString(g, code); drawString(g, code);
} finally {
g.dispose();
}
return image; return image;
} }

View File

@ -85,13 +85,16 @@ public class ShearCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE));
try{
// 画字符串 // 画字符串
drawString(g, code); drawString(g, code);
// 扭曲 // 扭曲
shear(g, this.width, this.height, ObjUtil.defaultIfNull(this.background, Color.WHITE)); shear(g, this.width, this.height, ObjUtil.defaultIfNull(this.background, Color.WHITE));
// 画干扰线 // 画干扰线
drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ColorUtil.randomColor()); drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ColorUtil.randomColor());
} finally {
g.dispose();
}
return image; return image;
} }