2013-10-28 71 views
0

我想突出顯示出現在我的字符串中的模式。爲此,我創建了一個模式數據庫並將它們存儲在一個數組中。現在我希望這些模式能夠在jtextpane中以不同的顏色突出顯示,並且我還使用了其他條件,以便根據存儲在其他數組列表中的字符串突出顯示不同顏色的模式,但我有以下例外情況。「AWT-EventQueue-0」java.lang.NullPointerException異常

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) 

這是我的代碼。

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) { 
    } 
} 

我該如何解決這個問題?

+3

'我怎樣才能解決這個問題' - 用硬編碼的文本發佈的[SSCCE(http://sscce.org/)爲''JTextPane's文件'在局部變量 – mKorbel

+0

'mot.get(i)==「set」' - >這是錯誤的。使用'mot.get(i).equals(「set」)'代替(但它不會解決這個問題)。 –

+0

這是在setText中傳遞的字符串method.seq =「aset」; – Sarah

回答

1

您的myHighlightPainter在某些情況下爲null

DefaultHighlighter線#72

  Highlighter.HighlightPainter p = info.getPainter(); 
     --> p.paint(g, info.getStartOffset(), info.getEndOffset(),a, component); 
+0

我該如何避免這個問題? – Sarah

相關問題