java - 在 ListView 中查看 JavaFX 中的大型日志文件

标签 java swing pagination javafx-2 text-files

我编写了一个 JavaFx 应用程序来查看日志文件。这些文件都在新选项卡中打开,我浏览文本并将其添加到 ListView 中。我创建了一个 cellfactory 来突出显示列表文件中的某些文本,这一切都正常。

问题是日志文件大小在 800-1300Mb 之间。一下子打开3-4个,JVM就达到了内存限制。

是否有另一种方法可以做到这一点,即仅将当前在 ListView 中显示的文本存储在内存中,并在滚动时将更多内容加载到内存中?

<小时/>

我需要能够使用滚动条滚动。我搜索了谷歌,发现了很多同样的问题。人们想要在 Java(Swing 中)中显示大型文本 1-10Gb 文件的情况可以追溯到几年前,但没有答案:

我查看了分页,但我需要能够使用滚动条,而且我似乎非常需要它。用户不应该知道某些部分不在内存中。他们滚动并显示下一行。

有人在 Java(Swing 或 JavaFX)中找到过这个问题的解决方案吗?

最佳答案

关键是忘记行号。除非每行的字节数完全相同,否则行号是一个抽象,需要您读取整个文件才能找到下一行的位置。

而是考虑字节位置,因为您可以通过使用 RandomAccessFile 来查找字节位置,而无需读取之间的字节。或 SeekableByteChannel 。当然,然后您必须将字节位置返回给客户端应用程序,以便在获取下一页时将其返回给服务器。

使用滚动条进行分页是一个简洁直观的技巧。困难的部分是重写滚动条以显示整个文件,而不仅仅是内存中的内容。

注意:刚刚注意到这个问题有多老了......但希望我的评论对下一个搜索者有用。

关于java - 在 ListView 中查看 JavaFX 中的大型日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239138/

相关文章:

ruby-on-rails - Searchkick分页,限制和偏移问题,滑轨

java - 刷新 jLabel 中的计数器

java - 构建单词列表处理应用程序的初始版本

forms - 通过分页保留搜索参数

java - Toedter 从 JDateChooser 获取日期

java - 垂直排列的按钮和 Swing 中的选项卡

sql - 使用限制的 Sequelize 分页需要 4 倍的时间来加载。我该如何优化?

java - 使用远程 WSDL 生成 stub (需要使用 SSL 证书的用户名和密码)?

java - 更改为 JGoodies 外观

Java:JComboBox addItem函数与jdk8和jdk7不同