b***i 发帖数: 3043 | 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 | b***i 发帖数: 3043 | 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){
| b***i 发帖数: 3043 | 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){
|
|