diff --git a/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java b/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java
index b43e5d24c6c..f785e24d9ab 100644
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java
@@ -83,6 +83,7 @@ public class BasicOptionPaneUI extends OptionPaneUI {
public static final int MinimumHeight = 90;
private static String newline;
+ private static int recursionCount;
/**
* JOptionPane
that the receiver is providing the
@@ -317,6 +318,7 @@ protected Container createMessageArea() {
"OptionPane.messageAnchor", GridBagConstraints.CENTER);
cons.insets = new Insets(0,0,3,0);
+ recursionCount = 0;
addMessageComponents(body, cons, getMessage(),
getMaxCharactersPerLineCount(), false);
top.add(realBody, BorderLayout.CENTER);
@@ -391,41 +393,75 @@ protected void addMessageComponents(Container container,
} else if ((nl = s.indexOf('\n')) >= 0) {
nll = 1;
}
- if (nl >= 0) {
- // break up newlines
- if (nl == 0) {
- JPanel breakPanel = new JPanel() {
- public Dimension getPreferredSize() {
- Font f = getFont();
-
- if (f != null) {
- return new Dimension(1, f.getSize() + 2);
- }
- return new Dimension(0, 0);
- }
- };
- breakPanel.setName("OptionPane.break");
- addMessageComponents(container, cons, breakPanel, maxll,
- true);
- } else {
- addMessageComponents(container, cons, s.substring(0, nl),
- maxll, false);
+ if (s.contains("")) {
+ /* line break in html text is done by
tag
+ * and not by /n so it's incorrect to address newline
+ * same as non-html text.
+ * Text between tags are extracted
+ * and rendered as JLabel text
+ */
+ int index1 = s.indexOf("");
+ int index2 = s.indexOf("");
+ String str = "";
+ if (index2 >= 0) {
+ str = s.substring(index2 + "".length());
+ s = s.substring(index1, index2 + + "