JTextPane编辑器大文件&表现

发布于 2024-09-16 13:27:42 字数 798 浏览 7 评论 0原文

我正在使用 JTextPane 来编辑 XML 文件。 jflex 解析器将 xml 文件拆分为标记并使用自定义文档(扩展 DefaultStyledDocument) i 颜色语法:

doc.setCharacterAttributes(token.getCharBegin() + change, token.getCharEnd() - token.getCharBegin(), Token_Styles_Define.getStyle(token.getDescription()), true);

我的问题是加载和编辑大型 xml 文件,例如 400kb xml 文件需要 30 秒,而 700kb 1Mb 我会获得 java 堆空间。 我用谷歌搜索,发现:

“定义 JTextPane/JEditorPane 可以很好处理的限制(例如 500KB 或 1MB)。您只需将文件的一大块加载到具有此大小的控件中。 首先加载文件的第一个分区。 然后,您需要与滚动容器交互,并查看它是否已到达文件当前块的结尾/开头。如果是这样,则显示一个漂亮的等待光标并将上一个/下一个块加载到内存和文本控件中。 加载块是根据文件中当前光标位置(偏移量)计算的。 加载块 = offset - limit/2 到 offset + limit/2 加载块时,JTextPane/JEditorPane 上的文本不得更改,否则用户会感觉处于文件的另一个位置。 这不是一个简单的解决方案,但如果您找不到任何其他第三方控件来执行此操作,我会这样做。 “(布鲁诺·康德)

这是一个好的解决方案吗?任何人都可以给我一个例子(链接教程项目)吗?或者还有其他解决方案吗? 我们如何提高 jtextpane 的性能? 谢谢

I'm using a JTextPane to edit XML files. A jflex parser split xml file in tokens and using a custom document (extends
DefaultStyledDocument) i color syntax:

doc.setCharacterAttributes(token.getCharBegin() + change,
token.getCharEnd() - token.getCharBegin(),
Token_Styles_Define.getStyle(token.getDescription()), true);

My problem is to load and edit large xml file, for exemple a 400kb xml file takes 30 seconds and for 700kb 1Mb i get java heap space.
I google it and i found :

" Define a limit that JTextPane/JEditorPane can handle well (like 500KB or 1MB). You'll only need to load a chunk of the file into the control with this size.
Start by loading the 1st partition of the file.
Then you need to interact with the scroll container and see if it has reached the end/beginning of the current chunk of the file. If so, show a nice waiting cursor and load the previous/next chunk to memory and into the text control.
The loading chunk is calculated from your current cursor position in the file (offset).
loading chunk = offset - limit/2 to offset + limit/2
The text on the JTextPane/JEditorPane must not change when loading chunks or else the user feels like is in another position of the file.
This is not a trivial solution but if you don't find any other 3rd party control to do this I would go this way. " (bruno conde)

Is this a good solution and can anybody give me an exemple (link tutorial project) ? or are any other solution?
How can we improve jtextpane performance?
Thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

所谓喜欢 2024-09-23 13:27:42

JTextPane 中的一兆字节文本应该不是问题。在我的桌面上,使用 setText() 添加 1MB 字符串大约需要 1.6 秒,但加载后没有明显的延迟。

尝试禁用语法突出显示。这是最有可能造成延误的原因。

A megabyte of text in a JTextPane should not be an issue. On my desktop, adding a 1MB string with setText() takes ~1.6 seconds, but once loaded there is no noticeable lag.

Try is disabling the syntax highlighting. That is the most likely source of the delay.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文