Name: gm110360 Date: 06/10/2002
FULL PRODUCT VERSION :
java version "1.4.0_00"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_00-b05)
Java HotSpot(TM) Client VM (build 1.4.0_00-b05, mixed mode)
FULL OPERATING SYSTEM VERSION :
SunOS unknown 5.8 Generic_108528-06 sun4u sparc
SUNW,Sun-Blade-10
A DESCRIPTION OF THE PROBLEM :
Netscape 6 w/ Java Plugin 1.3.1 and Netscape 6.2.2 w/ Java
Plugin 1.4 crash when JList is used as CellEditor &
CellRenderer in a JTable. This seems to occur only on
Solaris but was successfully reproduced on multiple machines
and Sun Solaris flavors.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1.Copy code below and compile.
2. Run in Netscape 6+ (as an applet), a simple table will be
displayed. Select the item in the JList (CRASH BABY).
3. Now try to refresh the browser (Look at it go!)
EXPECTED VERSUS ACTUAL BEHAVIOR :
Obviously, a browser crash is unexpected at this phase.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
===== plugin.trace =====
java.lang.NullPointerException
at javax.swing.JComponent.deregisterNextFocusableComponent(JComponent.java:992)
at javax.swing.JComponent.removeNotify(JComponent.java:4293)
at java.awt.Container.removeNotify(Container.java:2023)
at javax.swing.JComponent.removeNotify(JComponent.java:4286)
at javax.swing.JTable.removeNotify(JTable.java:477)
at java.awt.Container.removeNotify(Container.java:2023)
at javax.swing.JComponent.removeNotify(JComponent.java:4286)
at java.awt.Container.removeNotify(Container.java:2023)
at javax.swing.JComponent.removeNotify(JComponent.java:4286)
at java.awt.Container.removeNotify(Container.java:2023)
at javax.swing.JComponent.removeNotify(JComponent.java:4286)
at javax.swing.JRootPane.removeNotify(JRootPane.java:673)
at java.awt.Container.removeNotify(Container.java:2023)
at java.awt.Container.removeNotify(Container.java:2023)
at sun.plugin.viewer.MNetscapePluginObject.setWindow(MNetscapePluginObject.java:260)
at sun.plugin.navig.motif.Plugin.doit(Plugin.java:263)
at sun.plugin.navig.motif.Plugin.start(Plugin.java:96)
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
===== TestApplet.java =====
package com.e4e.uitools.calendar;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TestApplet extends JApplet {
public void init() {
JTable table = new JTable();
table.setDefaultRenderer(Object.class, new ListRenderer());
table.setDefaultEditor(Object.class, new ListRenderer());
table.setModel(new DefaultTableModel(3,3));
this.getContentPane().add(table);
}
}
===== ListRenderer.java =====package com.e4e.uitools.calendar;
import java.awt.Component;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.table.*;
public class ListRenderer extends JList implements TableCellEditor,
TableCellRenderer {
/**
* Constructor for ListRenderer.
*/
public ListRenderer() {
super();
DefaultListModel model = new DefaultListModel();
model.addElement("CRASH BABY);
this.setModel(model);
}
public Component getTableCellEditorComponent(
JTable table,
Object value,
boolean isSelected,
int row,
int column) {
return this;
}
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
return this;
}
public void addCellEditorListener(CellEditorListener l) {
}
public void cancelCellEditing() {
}
public Object getCellEditorValue() {
return null;
}
public boolean isCellEditable(EventObject anEvent) {
return true;
}
public void removeCellEditorListener(CellEditorListener l) {
}
public boolean shouldSelectCell(EventObject anEvent) {
return false;
}
public boolean stopCellEditing() {
return false;
}
}
---------- END SOURCE ----------
(Review ID: 153408)
======================================================================