-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
6
-
x86
-
windows_xp
FULL PRODUCT VERSION :
jdk1.5.0_06 built applet running with jre 1.6.0 update 1
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
setting strikethrough on text causes an IllegalArgumentException to be thrown in,
java.lang.IllegalArgumentException: Zero length string passed to TextLayout constructor.
at java.awt.font.TextLayout.<init>(Unknown Source)
at sun.font.FontDesignMetrics.charsWidth(Unknown Source)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Use my test case applet and clcik the button to turn on the strikethough on the text of the form.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
strikethrough to work
ACTUAL -
exception thrown and screen not being repainted properly
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "AWT-EventQueue-1" java.lang.IllegalArgumentException: Zero length string passed to TextLayout constructor.
at java.awt.font.TextLayout.<init>(Unknown Source)
at sun.font.FontDesignMetrics.charsWidth(Unknown Source)
at javax.swing.text.Utilities.getTabbedTextWidth(Unknown Source)
at javax.swing.text.Utilities.getTabbedTextWidth(Unknown Source)
at javax.swing.text.PlainView.getLineWidth(Unknown Source)
at javax.swing.text.PlainView.calculateLongestLine(Unknown Source)
at javax.swing.text.PlainView.updateMetrics(Unknown Source)
at javax.swing.text.PlainView.setSize(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paintSafely(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
public class JStrikeThroughTestApplet extends JApplet implements ActionListener
{
private javax.swing.JPanel jContentPane = null;
private javax.swing.JTextField jTextField = null;
private javax.swing.JButton jButton = null;
private javax.swing.JLabel jLabel = null;
private int SET_STRIKETHROUGH_ON = 0;
private int SET_STRIKETHROUGH_OFF = 1;
private String [] buttonText = {"SetStrikeThough", "RemoveStrikeThrough"};
/**
* @throws java.awt.HeadlessException
*/
public JStrikeThroughTestApplet() throws HeadlessException {
super();
// TODO Auto-generated constructor stub
init();
}
public static void main(String[] args) {
}
/**
* This method initializes this
*
* @return void
*/
public void init() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private javax.swing.JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new javax.swing.JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJLabel(), null);
}
return jContentPane;
}
/**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private javax.swing.JTextField getJTextField() {
if(jTextField == null) {
jTextField = new javax.swing.JTextField();
jTextField.setBounds(22, 47, 256, 20);
jTextField.setText("TextField Text");
}
return jTextField;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private javax.swing.JButton getJButton()
{
if(jButton == null)
{
jButton = new javax.swing.JButton();
jButton.setBounds(23, 86, 253, 25);
jButton.setText(buttonText[SET_STRIKETHROUGH_ON]);
jButton.addActionListener(this);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_ON]);
}
return jButton;
}
/**
* This method initializes jLabel
*
* @return javax.swing.JLabel
*/
private javax.swing.JLabel getJLabel() {
if(jLabel == null) {
jLabel = new javax.swing.JLabel();
jLabel.setBounds(22, 18, 256, 20);
jLabel.setText("Label Text");
}
return jLabel;
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e)
{
String action = e.getActionCommand();
if(action.equals(buttonText[SET_STRIKETHROUGH_ON]))
{
jButton.setText(buttonText[SET_STRIKETHROUGH_OFF]);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_OFF]);
updateFonts(SET_STRIKETHROUGH_ON);
}
else if(action.equals(buttonText[SET_STRIKETHROUGH_OFF]))
{
jButton.setText(buttonText[SET_STRIKETHROUGH_ON]);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_ON]);
updateFonts(SET_STRIKETHROUGH_OFF);
}
}
protected void updateFonts(int StrikeThroughState)
{
//label
Font font = getJLabel().getFont();
Map Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJLabel().setFont(new Font(Attribs));
//textfield
font = getJTextField().getFont();
Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJTextField().setFont(new Font(Attribs));
//button
font = getJButton().getFont();
Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJButton().setFont(new Font(Attribs));
/////////////////////////////////////////////////
getJContentPane().repaint();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
none as it is a show stopper.
jdk1.5.0_06 built applet running with jre 1.6.0 update 1
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
setting strikethrough on text causes an IllegalArgumentException to be thrown in,
java.lang.IllegalArgumentException: Zero length string passed to TextLayout constructor.
at java.awt.font.TextLayout.<init>(Unknown Source)
at sun.font.FontDesignMetrics.charsWidth(Unknown Source)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Use my test case applet and clcik the button to turn on the strikethough on the text of the form.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
strikethrough to work
ACTUAL -
exception thrown and screen not being repainted properly
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "AWT-EventQueue-1" java.lang.IllegalArgumentException: Zero length string passed to TextLayout constructor.
at java.awt.font.TextLayout.<init>(Unknown Source)
at sun.font.FontDesignMetrics.charsWidth(Unknown Source)
at javax.swing.text.Utilities.getTabbedTextWidth(Unknown Source)
at javax.swing.text.Utilities.getTabbedTextWidth(Unknown Source)
at javax.swing.text.PlainView.getLineWidth(Unknown Source)
at javax.swing.text.PlainView.calculateLongestLine(Unknown Source)
at javax.swing.text.PlainView.updateMetrics(Unknown Source)
at javax.swing.text.PlainView.setSize(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paintSafely(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
public class JStrikeThroughTestApplet extends JApplet implements ActionListener
{
private javax.swing.JPanel jContentPane = null;
private javax.swing.JTextField jTextField = null;
private javax.swing.JButton jButton = null;
private javax.swing.JLabel jLabel = null;
private int SET_STRIKETHROUGH_ON = 0;
private int SET_STRIKETHROUGH_OFF = 1;
private String [] buttonText = {"SetStrikeThough", "RemoveStrikeThrough"};
/**
* @throws java.awt.HeadlessException
*/
public JStrikeThroughTestApplet() throws HeadlessException {
super();
// TODO Auto-generated constructor stub
init();
}
public static void main(String[] args) {
}
/**
* This method initializes this
*
* @return void
*/
public void init() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private javax.swing.JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new javax.swing.JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJLabel(), null);
}
return jContentPane;
}
/**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private javax.swing.JTextField getJTextField() {
if(jTextField == null) {
jTextField = new javax.swing.JTextField();
jTextField.setBounds(22, 47, 256, 20);
jTextField.setText("TextField Text");
}
return jTextField;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private javax.swing.JButton getJButton()
{
if(jButton == null)
{
jButton = new javax.swing.JButton();
jButton.setBounds(23, 86, 253, 25);
jButton.setText(buttonText[SET_STRIKETHROUGH_ON]);
jButton.addActionListener(this);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_ON]);
}
return jButton;
}
/**
* This method initializes jLabel
*
* @return javax.swing.JLabel
*/
private javax.swing.JLabel getJLabel() {
if(jLabel == null) {
jLabel = new javax.swing.JLabel();
jLabel.setBounds(22, 18, 256, 20);
jLabel.setText("Label Text");
}
return jLabel;
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e)
{
String action = e.getActionCommand();
if(action.equals(buttonText[SET_STRIKETHROUGH_ON]))
{
jButton.setText(buttonText[SET_STRIKETHROUGH_OFF]);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_OFF]);
updateFonts(SET_STRIKETHROUGH_ON);
}
else if(action.equals(buttonText[SET_STRIKETHROUGH_OFF]))
{
jButton.setText(buttonText[SET_STRIKETHROUGH_ON]);
jButton.setActionCommand(buttonText[SET_STRIKETHROUGH_ON]);
updateFonts(SET_STRIKETHROUGH_OFF);
}
}
protected void updateFonts(int StrikeThroughState)
{
//label
Font font = getJLabel().getFont();
Map Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJLabel().setFont(new Font(Attribs));
//textfield
font = getJTextField().getFont();
Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJTextField().setFont(new Font(Attribs));
//button
font = getJButton().getFont();
Attribs = font.getAttributes();
Attribs.put(TextAttribute.STRIKETHROUGH, StrikeThroughState == SET_STRIKETHROUGH_ON ? Boolean.TRUE : Boolean.FALSE);
getJButton().setFont(new Font(Attribs));
/////////////////////////////////////////////////
getJContentPane().repaint();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
none as it is a show stopper.
- duplicates
-
JDK-6478336 Exception measuring zero length string when font has layout attributes.
-
- Closed
-