0

I want to highlight the patterns that are present in my string. For this purpose I have created a database of patterns and stored them in an array. Now I want these patterns to be highlighted in jtextpane and with different colors and I have used if else condition for this purpose that will highlight the patterns with different colors based on the strings that are stored in other arraylist but I am having following exception .

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.text.DefaultHighlighter.paint(DefaultHighlighter.java:72)
at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:731)
at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:881)
at javax.swing.plaf.synth.SynthEditorPaneUI.paint(SynthEditorPaneUI.java:180)
at javax.swing.plaf.synth.SynthEditorPaneUI.update(SynthEditorPaneUI.java:168)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219)

at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
at javax.swing.RepaintManager$3.run(RepaintManager.java:808)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
atjava.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

This is my code.

  jTextPane2.setText(seq);

  for (int i = 0; i < mot.size(); i++) {
    if (mot.get(i) == "set") {
      myHighlightPainter = new MyHighlightPainter(Color.red);
    } else if (mot.get(i) == "get") {
      myHighlightPainter = new MyHighlightPainter(Color.green);
    }
    highlight(jTextPane2, pat.get(i));
  }// patterns arraylist
}

public void highlight(JTextComponent textComp, String pattern) {

  try {
    Highlighter hilite = textComp.getHighlighter();
    Document doc = textComp.getDocument();
    String text = doc.getText(0, doc.getLength());
    int pos = 0;

    // Search for pattern
    // see I have updated now its not case sensitive
    while ((pos = text.toUpperCase().indexOf(pattern.toUpperCase(), pos)) >= 0) {
      // Create highlighter using private painter and apply around pattern
      hilite.addHighlight(pos, pos + pattern.length(), myHighlightPainter);
      pos += pattern.length();
    }
  } catch (BadLocationException e) {
  }
}

How can I solve this problem?

3
  • 3
    How can I solve this problem? -- by posting an SSCCE with hardcoded text for JTextPanes Document in local variable Commented Oct 28, 2013 at 13:18
  • mot.get(i) == "set" -> This is wrong. Use mot.get(i).equals("set") instead (but it will not solve this problem). Commented Oct 28, 2013 at 13:43
  • This is the string which is passed in setText method.seq="aset"; Commented Oct 28, 2013 at 13:44

1 Answer 1

1

Your myHighlightPainter is null in some cases.

DefaultHighlighter line#72

            Highlighter.HighlightPainter p = info.getPainter();
      -->   p.paint(g, info.getStartOffset(), info.getEndOffset(),a, component);
Sign up to request clarification or add additional context in comments.

1 Comment

How can I avoid that problem?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.