当前位置: 首页 > 知识库问答 >
问题:

扩展javax.swing.text.html.HTMLDocument的非法访问

范侯林
2023-03-14

我想知道是否有一种方法可以用“简单的方法”来完成这件事,也许有人知道一个解决方案:

我正在使用javax.swing.text.html.HTMLDocument类,但由于某种原因,我需要的至少2个方法是非公开的,即便如此,我需要“重写”它们,以更改一些内容,但在某种程度上,我需要保留HTMLDocument类,因为我使用了大量的javax.swing.text.html包...

因此,我首先要做的是创建一些MyHTMLDocument扩展HTMLDocument,并尝试重写一些方法...当那失败了,我试图解决它使用反射的一些方法,但没有工作…因此,在被取消存储后,我将所有HTMLDocument代码“复制-粘贴”为MyHTMLDocument(扩展HTMLDocument),更改我需要的内容并将其放入我自己的“javax.swing.text.html”包中,现在看来还可以,但是...

...当我最后运行它的时候,我被一些“非法访问错误”卡住了,当我调用TagActions时,例如...我很沮丧...

拜托,如果有人能帮我,我真的很感激。

更新:

好的,让我澄清一下:

在javax.swing.text.html.HTMLDocument类上,可以找到三种方法:

公共getReader(内部位置)

public getReader(int pos、int pos、int popDepth、int pushDepth、html.tag insertTag)

getReader(int pos、int pos、int popDepth、int pushDepth、html.tag insertTag,boolean insertInsertTag)

最后一个是非公共的或受保护的。

另外,还有一个名为HTMLReader的内部类,它有3个构造函数:

公共HTMLReader(int偏移量)

公共HTMLReader(int offset,int popDepth,int pushDepth,html.tag insertTag)

HTMLReader(int offset,int popDepth,int pushDepth,html.tag insertTag,boolean insertInsertTag,boolean insertAfterImplied,boolean wantsTrailingNewline)

最后一个是非公开的。

我需要做的是从我的自定义类中至少调用这2个非public:public class MyHTMLDocument extends HTMLDocument{

}但我不知道怎么做..我甚至尝试了一些反射,它似乎对方法有效,但我找不到一种方法对构造函数做同样的...再次感谢。

共有1个答案

狄信然
2023-03-14

这两个方法都是package private的,这就是为什么您无法访问它们的原因。我同意这可能是一个bug,考虑到消息来源的评论:

356       /**
357        * Fetches the reader for the parser to use to load the document
358        * with HTML.  This is implemented to return an instance of
359        * HTMLDocument.HTMLReader.  Subclasses can reimplement this
360        * method to change how the document get structured if desired
361        * (e.g. to handle custom tags, structurally represent character
362        * style elements, etc.).
363        *
             ...

如果您真的想这样做,可以将其放在您自己的项目中的javax.swing.text.html中。没有什么能阻止你,但那会给你带来潜在的困惑。

这种技术是否可以接受本身就是一个有趣的问题。可能存在类加载问题,特别是如果您运行在一个使用类加载进行游戏的容器中。

 类似资料:
  • 我部署了一个Neo4j非托管扩展。可以使用REST客户端调用非托管扩展并成功返回结果。问题是,当我尝试从另一个java类调用/调用非托管扩展时,它会继续抛出未经授权的401。 我使用Spring RestTemboard来调用非托管扩展。 我的代码: 完全错误:

  • 我正在开发一个chrome扩展,遇到了一个大问题。 奇怪的是,我可以访问iframe的html。因此,这段代码在chrome扩展中可以完美地工作: 我尝试将“all_frames”:true放入清单文件中,但没有成功:(

  • Markdown 标准 本身所包含的功能有限,所以产生了许多第三方的扩展语法,如 GitHub Flavored Markdown。 这里只介绍众多扩展语法中的一部分内容,它们在不同平台或工具的支持程度不同,请参考具体平台或工具的文档和说明来使用。 删除线 代码块和语法高亮 表格 Task List CommonMark CommonMark 试图将碎片化的 Markdown 实现和扩展进行标准化

  • 问题内容: 是否可以从Java代码访问扩展功能? 我在Kotlin文件中定义了扩展功能。 (生成的)java类在哪里。现在,我想用普通的Java代码访问它: 但是,这不起作用。 IDE无法识别该方法,并且编译失败。 起作用的是与kotlin的静态函数一起使用: 通过使用我的IDE似乎已正确配置。 我从kotlin文档中搜索了整个Java互操作文件,并且在谷歌上搜索了很多,但是找不到。 我究竟做错了

  • 我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。

  • 问题内容: 我是新手,尝试快速创建UIColor类的扩展为 之后,我以以下方式访问该方法 我不知道该声明应作为参数传递给我。 问题答案: 您已经定义了一个 实例方法 ,这意味着您只能在一个实例上调用它: 发生编译器错误“缺少参数”是因为 实例方法是Swift中的Curried Function ,因此可以等效地称为 (但这是一件奇怪的事情,我添加它只是为了解释错误消息的来源。) 但是,您真正想要的