jfinal在openjdk下验证码生成有问题
跑在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
自创一个 MyCaptchRender extends CaptchRender,然后改改里面的字体配置,改成一个你的系统支持的字体,然后 render(new MyCaptchRender()); 这样使用
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;
但是画出来数字离的太开了。
@JFinal 最近用dokcer部署了一个tomcat,然后tomcat官方的docker镜像貌似都是用openjdk的。然后验证码那边也是类似的问题。不知道是否已经有解决方案?
dockerhub上tomcat应该也有非openjdk版本的镜像,使用oraclejdk的镜像验证码就可以使用了。
回复
@JFinal : 感谢波总~回复总是那么及时。
等百度解决吧
我也是这个错,有什么解决办法吗?
我没有设置字体,将setFont()注释掉了,照样报错
没这个字体库
我将setFont()那一句注释掉了,照样报这个错误
这是跑在BAE上的,BAE用的是openjdk,头疼
No fonts found..很简单的错误
验证码上面的字符是画出来的,需要指定字体,如果是英文和数字的话,可以使用默认字体,如果是中文的话,必须指定一种中文字体。如果连默认字体都找不到,就是系统问题,和你代码无关。
推测是你用了自定义的字体,服务器上当然没有了