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?
How can I solve this problem?-- by posting an SSCCE with hardcoded text forJTextPanesDocumentin local variablemot.get(i) == "set"-> This is wrong. Usemot.get(i).equals("set")instead (but it will not solve this problem).