jfinal在openjdk下验证码生成有问题

发布于 2021-12-01 21:28:13 字数 3467 浏览 761 评论 13

跑在BAE上面,BAE用的openjdk1.6,产生验证码的时候报错:

java.lang.Error: Probable fatal error:No fonts found.
at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1087)
at sun.font.FontManager.initialiseDeferredFont(FontManager.java:966)
at sun.font.CompositeFont.doDeferredInitialisation(CompositeFont.java:254)
at sun.font.CompositeFont.getSlotFont(CompositeFont.java:334)
at sun.font.CompositeGlyphMapper.initMapper(CompositeGlyphMapper.java:81)
at sun.font.CompositeGlyphMapper.<init>(CompositeGlyphMapper.java:62)
at sun.font.CompositeFont.getMapper(CompositeFont.java:390)
at sun.font.GlyphList.mapChars(GlyphList.java:269)
at sun.font.GlyphList.setFromString(GlyphList.java:244)
at sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:71)
at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2813)
at utils.MyCapthaRender.drawGraphic(MyCapthaRender.java:88)
at utils.MyCapthaRender.render(MyCapthaRender.java:35)
at com.jfinal.core.ActionHandler.handle(ActionHandler.java:92)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1372)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:487)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:249)
at com.baidu.jetty.security.quotalimit.LimitQuotaHandler.doHandle(LimitQuotaHandler.java:64)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1003)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:200)
at com.baidu.jetty.security.quotalimit.LimitQuotaHandler.doScope(LimitQuotaHandler.java:43)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:934)
at org.eclipse.jetty.webapp.WebAppContext.doScope(WebAppContext.java:539)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:226)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:305)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:368)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:605)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1069)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:601)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:425)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
at java.lang.Thread.run(Thread.java:679)

找不到解决办法....


@jfinal

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

别再吹冷风 2021-12-03 22:03:38

自创一个 MyCaptchRender extends CaptchRender,然后改改里面的字体配置,改成一个你的系统支持的字体,然后 render(new MyCaptchRender()); 这样使用

秋意浓 2021-12-03 22:03:34

URL url = new URL(baseUrl + "msyh.ttc");

InputStream is = url.openStream();

cFont = Font.createFont(Font.PLAIN, is);

System.out.println("cFont--"+cFont);

is.close();

Graphics2D g = bi.createGraphics();
g.setColor(color);
try {
if (fontName == null) {
g.setFont(font.deriveFont(fontStyle, fontSize));
} else {
g.setFont(new Font(fontName, fontStyle, fontSize));
}
} catch (Exception e) {
e.printStackTrace();
}
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));

g.drawString(charSequ, x, y + fontSize);

g.dispose();
return bi;

但是画出来数字离的太开了。

陌上芳菲 2021-12-03 22:03:34

@JFinal 最近用dokcer部署了一个tomcat,然后tomcat官方的docker镜像貌似都是用openjdk的。然后验证码那边也是类似的问题。不知道是否已经有解决方案?

德意的啸 2021-12-03 22:03:34

dockerhub上tomcat应该也有非openjdk版本的镜像,使用oraclejdk的镜像验证码就可以使用了。

带上头具痛哭 2021-12-03 22:03:34

回复
@JFinal : 感谢波总~回复总是那么及时。

各自安好 2021-12-03 22:03:29

等百度解决吧

梅窗月明清似水 2021-12-03 22:02:53

我也是这个错,有什么解决办法吗?

草莓味的萝莉 2021-12-03 22:02:33

我没有设置字体,将setFont()注释掉了,照样报错

挽清梦 2021-12-03 22:00:27

没这个字体库

各自安好 2021-12-03 21:59:27

我将setFont()那一句注释掉了,照样报这个错误

刘备忘录 2021-12-03 20:32:39

这是跑在BAE上的,BAE用的是openjdk,头疼

凯凯我们等你回来 2021-12-03 02:42:39

No fonts found..很简单的错误

验证码上面的字符是画出来的,需要指定字体,如果是英文和数字的话,可以使用默认字体,如果是中文的话,必须指定一种中文字体。如果连默认字体都找不到,就是系统问题,和你代码无关。

推测是你用了自定义的字体,服务器上当然没有了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文