Hi,

RectListManager throws NullPointerException

on method RectListManager.mergeRects(int overhead, int lineOverhead) on
the last few line somehow if variable j or size == 0 then
RectListManager.getBounds() will return null, in that case the line
following will throw NullPointerException.

This is not happen before. Only happen on recent cvs.

I attached the file to reproduced it.


Regards
Tonny Kohar

/*
 * BugRectListManager.java
 *
 * Created on November 7, 2003, 5:11 PM
 */

package kiyut.bug;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;

import org.apache.batik.bridge.*;
import org.apache.batik.dom.svg.*;
import org.apache.batik.gvt.*;
import org.apache.batik.gvt.renderer.*;
import org.apache.batik.util.*;

import org.w3c.dom.*;
import org.w3c.dom.css.*;
import org.w3c.dom.svg.*;


/**
 *
 * @author  Tonny Kohar
 */
public class BugRectListManager {
    File file = null;
    SVGDocument doc;
    Display display;
    
    ImageRenderer renderer;
    UserAgent      userAgent;
    DocumentLoader loader;
    BridgeContext  ctx;
    
    public static void main(String[] args) {
        BugRectListManager bug = new BugRectListManager(args);
        bug.run();
    }
    
    /** Creates a new instance of BugRectListManager */
    public BugRectListManager(String[] args) {
        if (args[0] == null) {
            System.out.println("Please enter the svg filename as argument");
            System.exit(1);
        }
        System.out.println(args[0]); //just checking args
        file = new File(args[0]);
    }
    
    public void run() {
        doc = loadSVGDocument(file);
        buildGVT();
        JFrame frame = createFrame();
        frame.pack();
        frame.setVisible(true);
    }
    
    public SVGDocument loadSVGDocument(File file) {
        try {
            String url = file.toURL().toString();
            String parser = XMLResourceDescriptor.getXMLParserClassName();
            SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
            SVGDocument svgDocument = f.createSVGDocument(url);
            return svgDocument;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    private void buildGVT() {
        renderer  = new DynamicRenderer();
        userAgent = new UserAgentAdapter();
        loader    = new DocumentLoader(userAgent);
        ctx       = new BridgeContext(userAgent, loader);
        
        GraphicsNode   gvtRoot = null;
        GVTBuilder builder = new GVTBuilder();
        
        try {
            gvtRoot = builder.build(ctx, doc);
            System.out.println("Rendering...");
            renderer.setTree(gvtRoot);
            renderer.setDoubleBuffered(true);
            
            renderer.updateOffScreen(400,200);
            renderer.repaint(new Rectangle(400,200));

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    private JFrame createFrame() {
        ActionListener actionListener = new ActionListener() {
            public void actionPerformed(ActionEvent e) { buttonActionPerformed(e); }
        };
        
        JButton button = new JButton("error");
        button.setActionCommand("error");
        button.addActionListener(actionListener);
        
        JPanel buttonPane = new JPanel();
        buttonPane.add(button);
        
        display = new Display();
        display.setPreferredSize(new Dimension(400,200));
        display.setImage(renderer.getOffScreen());
                
        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(display,BorderLayout.CENTER);
        contentPane.add(buttonPane,BorderLayout.SOUTH);
        
        JFrame frame = new JFrame();
        frame.setContentPane(contentPane);
        
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        
        return frame;
    }
    
    private void buttonActionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        if (command.equalsIgnoreCase("error")) {
            Node node = doc.getElementById("rect1");
            if (node instanceof SVGRectElement) {
                SVGRectElement rect = (SVGRectElement)node;
                rect.getX().getBaseVal().setValue(10);
                rect.getY().getBaseVal().setValue(10);
                rect.getWidth().getBaseVal().setValue(100);
                rect.getHeight().getBaseVal().setValue(50);
                
                renderer.repaint(new Rectangle(400,200));

                display.setImage(renderer.getOffScreen());
                display.repaint();
            }
        }
    }
    
    private class Display extends JPanel {
        private BufferedImage image = null;
        
        public Display() {
            setBackground(Color.WHITE);
        }
        
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image == null) return;
            Graphics2D g2d = (Graphics2D)g;
            g2d.setComposite(AlphaComposite.SrcOver);
            g2d.drawRenderedImage(image, null);
        }
        
        public void setImage(BufferedImage img) {
            image = img;
        }
    }
}

<<attachment: bug_rect_list_manager.svg>>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to