Hello All,

    Please forgive me if a form of this problem has already been posted as this is my first posting to this list and I just joined it.

I am trying to gernerate a game map of many rectangles on a java servlet.  Without pattern, it seems that 3 or 4 random rectangles always throw an  java.lang.ArrayIndexOutOfBoundsException.

This occurs everytime I draw my map and slows the generation down considerably.

I have tried my best (via synchronization) to make the request single threaded as to eliminate possible threading issues, however this did not help.

Any help would be greatly appreciated.

thanks in advance,
Mike

Environment:

batik 1.6
tried Suse 10.1 and Windows XP.
tried Tomcat 5.0 and 5.5
java 1.5.0.06




Here is my handleRequest function:


SVGMapGenerator mg;
      SVGGraphics2D svgGenerator;
     
     
//    Get a DOMImplementation
      DOMImplementation domImpl =
      GenericDOMImplementation.getDOMImplementation();
     
      // Create an instance of org.w3c.dom.Document
      Document document = domImpl.createDocument("http://www.w3.org/2000/svg", "svg", null);
     
      mg =  new SVGMapGenerator( game, user  );
      mg.init();
     
//    Add the basic script
     
      svgGenerator = new SVGGraphics2D(document);
      svgGenerator.setSVGCanvasSize(
        new Dimension( game.getMap().getMaxX()*GlobalSettings.rectSize, game.getMap().getMaxY()*GlobalSettings.rectSize ) );
     
      mg.addScript(svgGenerator, document);
     
//    Create an instance of the SVG Generator
     
     
     
     
      try
      {
      Unit unit = null;
      if( action!=null ) {
      if( action.getState()==KriegeWorkflow.States.SELECT_TARGET_FIELD || action.getState()==KriegeWorkflow.States.SELECT_TARGET_UNIT )
      unit = game.getUnit( Integer.parseInt( action.getUnitId() ) );
      }
      mg.generateImage(unit, svgGenerator);
     
     
     
      response.setContentType( "image/svg+xml" );
      OutputStream out = response.getOutputStream();
     
      boolean useCSS = false; // we want to use CSS style attribute
      Writer outWriter = new OutputStreamWriter(out, "UTF-8");
      svgGenerator.stream(outWriter, useCSS);
     
     
     
     
      } catch( KriegeException e ) {
     
      s_trace.traceError( e.toString() );
      e.printStackTrace();
      }

Here is my rectangle drawing function.

private void  drawRect(SVGGraphics2D svggen, int x1, int y1,int w, int h, String id, String onclick, Color fill, Color border)
  {
  SVGGraphics2D graphic = (SVGGraphics2D)svggen.create();

  Element tlg = getTopLevelGroup(graphic);
 

      graphic.setColor( border );
      graphic.setStroke( new BasicStroke( 2.0f ) );
      graphic.setColor( fill );
     
  try
  {
  graphic.fillRect( x1, y1, w, h );
  retry = false;
  }
      catch(java.lang.ArrayIndexOutOfBoundsException e)
      {
      s_tracer.traceError("SVG ArrayIndexOutOfBoundsException");
      s_tracer.traceException(e);
      }
     
     

      Element imgGroup = getTopLevelGroup(graphic);
     
     
  tlg.appendChild(imgGroup);

  HashMap attributes = new HashMap();

  attributes.put("id",id);

  attributes.put("onclick",onclick);

  setElementAttr(imgGroup, attributes, "rect");

  setTopLevelGroup(svggen, tlg);

  //s_tracer.traceInfo( "created image: " + id );
  }

Here are various exceptions that I get:

Mon Aug 14 11:59:16 CEST 2006: Error : SVGMapGenerator: java.lang.ArrayIndexOutOfBoundsException: 24 >= 2
at java.util.Vector.elementAt(Vector.java:432)
at org.apache.batik.svggen.DOMTreeManager.recycleTopLevelGroup(Unknown Source)
at org.apache.batik.svggen.DOMTreeManager.setTopLevelGroup(Unknown Source)
at org.apache.batik.svggen.SVGGraphics2D.setTopLevelGroup(Unknown Source)
at de.karokriege.engine.SVGMapGenerator.setTopLevelGroup(SVGMapGenerator.java:174)
at de.karokriege.engine.SVGMapGenerator.drawRect(SVGMapGenerator.java:227)
at de.karokriege.engine.SVGMapGenerator.getBaseMapImage(SVGMapGenerator.java:83)
at de.karokriege.engine.SVGMapGenerator.generateImage(SVGMapGenerator.java:291)
at de.karokriege.servlet.SVGMapGeneratorServlet.handleRequest(SVGMapGeneratorServlet.java:112)
at de.karokriege.servlet.SVGMapGeneratorServlet.doGet(SVGMapGeneratorServlet.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

Mon Aug 14 11:59:10 CEST 2006: Error : SVGMapGenerator: java.lang.ArrayIndexOutOfBoundsException: 17 >= 14
at java.util.Vector.elementAt(Vector.java:432)
at org.apache.batik.svggen.DOMTreeManager.recycleTopLevelGroup(Unknown Source)
at org.apache.batik.svggen.DOMTreeManager.getTopLevelGroup(Unknown Source)
at org.apache.batik.svggen.SVGGraphics2D.getTopLevelGroup(Unknown Source)
at org.apache.batik.svggen.SVGGraphics2D.getTopLevelGroup(Unknown Source)
at de.karokriege.engine.SVGMapGenerator.getTopLevelGroup(SVGMapGenerator.java:151)
at de.karokriege.engine.SVGMapGenerator.drawRect(SVGMapGenerator.java:189)
at de.karokriege.engine.SVGMapGenerator.getBaseMapImage(SVGMapGenerator.java:83)
at de.karokriege.engine.SVGMapGenerator.generateImage(SVGMapGenerator.java:291)
at de.karokriege.servlet.SVGMapGeneratorServlet.handleRequest(SVGMapGeneratorServlet.java:112)
at de.karokriege.servlet.SVGMapGeneratorServlet.doGet(SVGMapGeneratorServlet.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

Reply via email to