用户名:  密码: 记住用户名和密码
找回密码   找回用户名   宣传积分   充值   开通课程   终身会员   手机/平板/Mac播放视频
我爱自学网
客服 点击这里给我发消息  (QQ:1760002012)   业务合作 点击这里给我发消息
我爱自学网诚聘录课讲师
当前位置:首页 >> 学习交流 >> Java网站开发视频教程学习交流区 >> JAVA图片验证码异常问题
发贴提问
  • 会员:jiangqt
  • 主题:4
  • 回帖:2
  • 积分:0
  • 身份:白金会员
JAVA图片验证码异常问题

现象说明:能刷新出字符,但是常会抛出异常,说是STRING定义有异常,对照老师所讲的,没有错。有时候在第一次刷新时出现。有时连续要刷新几次才会出现


异常现象:

016-8-4 15:16:06 org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet ValidataServlet threw exception
java.lang.StringIndexOutOfBoundsException: String index out of range: 54
at java.lang.String.substring(String.java:1935)
at ptms05.ValidataServlet.doPost(ValidataServlet.java:73)
at ptms05.ValidataServlet.doGet(ValidataServlet.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)

2016-8-4 15:16:08 org.apache.catalina.core.StandardWrapperValve invoke

源代码:

//response.setContentType("text/html");
//PrintWriter out = response.getWriter();
//创建图像
int width=100;
int height=30;
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//创建图层
Graphics   g=image.getGraphics();
//确立画笔颜色
g.setColor(Color.BLACK);
//创建矩形
g.fillRect(0, 0, width, height);
//在大矩形中画小矩形
g.setColor(Color.WHITE);
g.fillRect(1, 1, width-2, height-2);

//填充字符
String data="abcdefghijklmnuvwxyzABCDEFGHIJKLMNUVWXYZ1234567890";
//随机获取4个字符做为验证码
   Random random=new Random();
  for (int i = 0; i < 4; i++) {
 //从DATA的62个字符中随机取的4个字符
int index=random.nextInt(62);
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 22));
String str=data.substring(index, index+1);
g.drawString(str, 25*i, 26);

}

//服务器响应页面的请求
response.setContentType("image/jpeg");
//输出图像到浏览器
ImageIO.write(image, "jpg", response.getOutputStream());

现象说明:能刷新出字符,但是常会抛出异常



编辑主题     发表于:2016-08-04 15:31:13
  • 会员:jiangqt
  • 主题:4
  • 回帖:2
  • 积分:0
  • 身份:白金会员
2#
已经找到问题所在了,是输入字符少了数字才会抛出异常
编辑回贴     发表于:2016-08-05 18:59:00
发贴提问
发表回复:
 
     
用户名:  
密 码:  
        
注:没有会员帐号的学员请点击“注册”,免费获得帐号,多谢合作!