Redian新闻
>
jtextpane syntax highlight问题
avatar
jtextpane syntax highlight问题# Java - 爪哇娇娃
b*i
1
我现在做了一个文本编辑器,用于BASIC语言等。
这个编辑器可以把关键字变蓝色并变粗体,字符串变粉红,没有右边引号的字符串变红
,注释变绿
很简单吧?
作了一个函数叫processtext(int start, int length),在keyreleased里调用。
经常死机,就是程序不继续执行了。
于是我用了一个semaphore light来控制process不能重入
@Override
public void keyReleased(KeyEvent e) {
if (changed){
int pos = getCaretPosition();
Element elem = Utilities.getParagraphElement((JTextComponent)e.getSource
(), pos);
int start = elem.getStartOffset();
int end = elem.getEndOffset();
try {
light.acquire();
process(sta
avatar
b*i
2
觉得可能是一个currentLineHighLighter的问题,是这样的,要求光标所在的行要高亮
,所以
程序如下,当时调试的时候很多exception,我就catch了,但是没有处理,不知道有没
有问题。把这个highlighter注释掉,就不死机了。
public class CurrentLineHighlighter{
private static final String LINE_HIGHLIGHT = "linehilight"; // as
clientproperty
private static final String PREVIOUS_CARET = "previousCaret"; // - used as
clientproperty
private static Color col = new Color(222,222,255);
private static Object obj;
private CurrentLineHighlighter(){
}
public static void install(JTextComponent c){

【在 b***i 的大作中提到】
: 我现在做了一个文本编辑器,用于BASIC语言等。
: 这个编辑器可以把关键字变蓝色并变粗体,字符串变粉红,没有右边引号的字符串变红
: ,注释变绿
: 很简单吧?
: 作了一个函数叫processtext(int start, int length),在keyreleased里调用。
: 经常死机,就是程序不继续执行了。
: 于是我用了一个semaphore light来控制process不能重入
: @Override
: public void keyReleased(KeyEvent e) {
: if (changed){

avatar
b*i
3
似乎的解决方案
updateUI(); after the setCaret(..)
参见
http://72.5.124.102/thread.jspa?threadID=518808&tstart=4965
我需要重复几百次输入,删除才能确定是否死机。不过,badlocationexception都不见了

【在 b***i 的大作中提到】
: 我现在做了一个文本编辑器,用于BASIC语言等。
: 这个编辑器可以把关键字变蓝色并变粗体,字符串变粉红,没有右边引号的字符串变红
: ,注释变绿
: 很简单吧?
: 作了一个函数叫processtext(int start, int length),在keyreleased里调用。
: 经常死机,就是程序不继续执行了。
: 于是我用了一个semaphore light来控制process不能重入
: @Override
: public void keyReleased(KeyEvent e) {
: if (changed){

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。