Java JEditorPane-尝试编辑html标记值并获取异常

Java JEditorPane-尝试编辑html标记值并获取异常,java,html,swing,jeditorpane,Java,Html,Swing,Jeditorpane,我有一个JEditorPane,我正在尝试编辑一个html元素属性,基本上将src x值改为自定义值 我的密码是: // Get <img src="..."> tag RunElement imageTagElement = getImageTagElement(htmlDocument); // Print src attribute value System.out.println("src : " + runElement.getAttribute(HTML.Attribu

我有一个JEditorPane,我正在尝试编辑一个html元素属性,基本上将src x值改为自定义值

我的密码是:

// 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,但这是一个受保护的方法,这意味着我不能从代码中调用它


因此,基本上我的问题是,如果您找到了所需的元素,如何编辑其属性?

问题是,HtmlDocument要求您在尝试更改任何属性之前执行writeLock,然后执行writeLock。所以要解决这个问题,我必须:

首先,为我的JEditorPane扩展EditorKit以使用自定义HtmlDocument。然后我扩展了HTMLDocument,使writeLock和writeUnlock可以公开访问:

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);
        ..
    }
}
现在,在上面的代码中,我所要做的就是在尝试编辑属性之前调用锁,并在编辑完成后解锁:

// lock
htmlDocument.hackWriteLock()

// 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");

// unlock
htmlDocument.hackWriteUnlock()
//锁
htmlDocument.hackWriteLock()
//得到标签
RunElement imageTagElement=getImageTagElement(htmlDocument);
//打印src属性值
System.out.println(“src:+runElement.getAttribute(HTML.Attribute.src));
//替换现有src值
removeAttribute(HTML.Attribute.SRC);
runElement.addAttribute(HTML.Attribute.SRC,“customValue”);
//解锁
htmlDocument.hackWriteUnlock()
一切都按预期进行。我能够修改和编辑文档中的属性


我想我现在不完全理解或理解的是为什么不能公开访问writeLock和writeLock?为什么它们被设置为受保护的?程序员试图阻止你做什么?为什么

为了更快地获得更好的帮助,请发布一个。
// lock
htmlDocument.hackWriteLock()

// 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");

// unlock
htmlDocument.hackWriteUnlock()