Issue Details (XML | Word | Printable)

Key: UBA-7048
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Janak Mulani
Reporter: Janak Mulani
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
ULCBase

NPE when the default icons for leaf, open and closed nodes are missing or removed from UIDefaults in the L&F.

Created: 07/Sep/06 09:12 PM   Updated: 09/Jan/09 10:42 AM
Component/s: core
Affects Version/s: ULC 6.1.1, UltraLightClient '08 Update 1
Fix Version/s: ULC 6.1.3, UltraLightClient '08 Update 2

Issue Links:
Duplicate
 

Fix: Fixed in build.1930


 Description  « Hide
For ULCTableTree, on the client side, TableTreeTree.getTableCellOffset should check for null when accessing
DefaultTreeCellRenderer.getLeafIcon() / getOpenIcon() / getClosedIcon()

The following snippet demonstrates the error:

import javax.swing.UIDefaults;
import javax.swing.UIManager;

import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCScrollPane;
import com.ulcjava.base.application.ULCTableTree;
import com.ulcjava.base.application.tabletree.DefaultMutableTableTreeNode;
import com.ulcjava.base.application.tabletree.DefaultTableTreeModel;
import com.ulcjava.base.development.DevelopmentRunner;


public class ULCTableTreeTest extends AbstractApplication {
    
    public void start() {

        DefaultMutableTableTreeNode root = new DefaultMutableTableTreeNode(
                new Object[] { "node", "abs", "per" }, false);
        DefaultMutableTableTreeNode node1 = new DefaultMutableTableTreeNode(
                new Object[] { "node1", "total",
                        "total % " }, true);
        DefaultMutableTableTreeNode node2 = new DefaultMutableTableTreeNode(
                new Object[] { "AAAA", "13605", "16.84" }, false);
        DefaultMutableTableTreeNode node3 = new DefaultMutableTableTreeNode(
                new Object[] { "BBBBB", "xx", "yy" }, true);
        DefaultMutableTableTreeNode node4 = new DefaultMutableTableTreeNode(
                new Object[] { "CCCC", "11", "0.01" }, false);
        DefaultMutableTableTreeNode node5= new DefaultMutableTableTreeNode(
                new Object[] { "DDDD", "zz", "vv" }, true);

        node1.add(node2);
        node4.add(node5);

        root.add(node1);
        root.add(node3);
        root.add(node4);

        DefaultTableTreeModel model = new DefaultTableTreeModel(root,
                new String[] { "col1", "col2", "col3" });
        model.setRoot(root);
        
        ULCTableTree tree = new ULCTableTree(model);
        tree.setRootVisible(false);
        tree.setShowsRootHandles(true);       
        tree.setTableTreeHeader(null);

        ULCFrame frame = new ULCFrame();
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
        frame.add(new ULCScrollPane(tree));
        frame.pack();
        frame.setSize(700, 300);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        
        UIDefaults uiDefaults = UIManager.getDefaults();        
        uiDefaults.remove("Tree.leafIcon");
        
        DevelopmentRunner.setApplicationClass(ULCTableTreeTest.class);
        DevelopmentRunner.run();
    }
}

>java.lang.NullPointerException
> at
>com.ulcjava.base.client.tabletree.TableTreeTree.getTableCellOffset(
>TableTreeTree.java:4)
> at
>com.ulcjava.base.client.tabletree.TreeColumnCellRenderer.getTableCe
>llRendererComponent(TreeColumnCellRenderer.java:7)
> at
>com.ubs.swidULF.v2.client.tabletree.UlfTreeColumnCellRenderer.getTa
>bleCellRendererComponent(UlfTreeColumnCellRenderer.java:96)
> at javax.swing.JTable.prepareRenderer(JTable.java:3789)
> at
>com.ubs.swidULF.v2.client.tabletree.UlfTableTreeTable.prepareRender
>er(UlfTableTreeTable.java:52)
> at
>javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1236)
> at
>javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1138)
> at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1061)
> at com.ubs.swidULF.v2.plaf.ulf.UlfTableUI.paint(UlfTableUI.java:65)
> at javax.swing.plaf.ComponentUI.update(ComponentUI.java:174)
> at javax.swing.JComponent.paintComponent(JComponent.java:576)
> at javax.swing.JComponent.paint(JComponent.java:843)
> at
>com.ulcjava.base.client.tabletree.TableTreeTable.paint(TableTreeTab
>le.java:43)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JViewport.paint(JViewport.java:753)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at javax.swing.JComponent.paint(JComponent.java:852)
> at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
> at javax.swing.JComponent.paintChildren(JComponent.java:682)
> at
>javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4919)
> at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4865)
> at javax.swing.JComponent.paint(JComponent.java:833)
> at
>java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:63)
> at
>sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:93)
> at
>sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:130)
> at java.awt.Container.paint(Container.java:1349)
> at
>java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:54)
> at sun.awt.RepaintArea.paint(RepaintArea.java:216)
> at
>sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:293)
> at java.awt.Component.dispatchEventImpl(Component.java:3774)
> at java.awt.Container.dispatchEventImpl(Container.java:1665)
> at java.awt.Window.dispatchEventImpl(Window.java:1653)
> at java.awt.Component.dispatchEvent(Component.java:3574)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:536)
> at
>com.ulcjava.base.client.FilteringEventQueue.dispatchEvent(Filtering
>EventQueue.java:25)
> at
>java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatch
>Thread.java:237)
> at
>java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchTh
>read.java:187)
> at
>java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:181)
> at
>java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:173)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:136)
>



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Janak Mulani added a comment - 29/Dec/08 12:42 PM
After the fix in 6.1.3 :

TableTreeTree.getTableCellOffset should check if renderer component has an icon or not before computing the width.