Java JEditorPane-尝试编辑html标记值并获取异常
我有一个JEditorPane,我正在尝试编辑一个html元素属性,基本上将src x值改为自定义值 我的密码是: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
// 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()