2013-07-14 2 views
0

을 얻는 것은 내가하는 JEditorPane를하고 난 기본적으로 사용자 정의 값자바 JEditorPane로는 - HTML 태그 값을 편집하려고 노력하고 예외

에에의 src x 값을 변경, html 요소 속성을 구경에게 하나를 편집하기 위해 노력하고있어 내가 가진 코드는 다음과 같습니다

javax.swing.text.StateInvariantError: Illegal cast to MutableAttributeSet 

가 나는 읽기 : 나는 (당신이 대체 할 수 있기 때문에) 기존의 속성을 제거하려고 할 때
// Get <img src="..."> tag 
RunElement imageTagElement = getImageTagElement(htmlDocument); 

// Print src attribute value 
System.out.println("src : " + runElement.getAttribute(HTML.Attribute.SRC)); 

// Replace existing src value 
runElement.removeAttribute(HTML.Attribute.SRC); 
runElement.addAttribute(HTML.Attribute.SRC, "customValue"); 

내가 마지막 행하기 전에에서 다음과 같은 예외를 얻을 몇몇 장소 당신은 writeLock를 사용할 수 있습니다,하지만 그건 보호 방법이 코드에서 호출 할 수 없음을 의미 ... 그래서 기본적으로

내 질문은 당신이 요소를 발견 한 경우 당신이 그것의 속성을 어떻게 편집합니까?

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

0

문제는 HtmlDocument가 임의의 특성과 writeUnlock을 변경하기 전에 writeLock을 수행해야한다는 것입니다. 이 문제를 해결하려면 다음을 수행해야했습니다.

먼저 JEditorPane에 대한 EditorKit을 확장하여 사용자 정의 HtmlDocument를 사용합니다. 그 때 나는 공개적으로 accesible writeLock를하고 writeUnlock 만들기 위해 HTMLDocument의 확장 : 다음

public class ExtendedHTMLDocument extends HTMLDocument 
{ 
    public void hackWriteLock() 
    { 
     writeLock(); 
    } 

    public void hackWriteUnlock() 
    { 
     writeUnlock(); 
    } 
} 

을 내가 그랬어 :

지금
public class ExtendedEditorKit extends HTMLEditorKit 
{ 
    @Override 
    public Document createDefaultDocument() 
    { 
     // For the left out code copy what's in the super method 
     .. 
     HTMLDocument doc = new ExtendedHTMLDocument(ss); 
     .. 
    } 
} 

나는 위의 코드에서, 내가 할 일은 시도하기 전에 잠금을 호출 할 것입니다 수 속성을 편집하고 내가 끝나면 잠금을 해제합니다.

모든 것이 예상대로 작동합니다. 문서의 속성을 수정하고 편집 할 수 있습니다.

지금 내가 완전히 이해하지 못했거나 감사하는 이유는 writeLock 및 writeUnlock에 공개적으로 액세스 할 수 없다는 것입니다. 왜 그들이 보호받는 것으로 설정 되었습니까? 프로그래머가 당신을 막으려 고하는 이유와 그 이유는 무엇입니까?