如何在Java中预加载类?

3
我的Swing界面中新的JInternalFrame第一次打开需要一些时间。根据分析器,大部分时间都花在了Classloader.loadClass()方法上。我知道它会在需要时动态加载类,确实下一次我打开同一个框架时速度要快得多。
这个应用程序有一个登录屏幕,然后是一个空的desktoppane的时间,用户在打开其中一个内部帧之前。我想既然我有一些“停顿时间”,我可以利用它来预先加载一些常见的类,这样当用户实际打开一个内部帧时,速度就会快得多。
除了必须通过我的面板生成整个“虚构构造函数”路径并实际初始化这些类的实例之外,还有什么方法可以实现这一点吗?
理想情况下,如果它可以级联这样的加载,那就更好了。有点像ant中classfileset所做的工作。

我用JasperReports解决了这个问题。我所做的是创建一个虚拟报表,预加载其jar包和依赖项。 - JCalcines
有一个ClassPreloader,你可以使用它来自定义类预加载。例如,加载任何以某些字符串、正则表达式或某些包开头的类。 - StarPinkER
@StarPinkER - 很有趣!谢谢你提供的链接,我会去看看的。 - Gnoupi
1个回答

4
假设您没有使用类加载器进行任何特殊操作,您可以为想要预加载的每个类调用Class.forName(String className)。这将执行这些类中的静态初始化程序,因此可能会影响您的程序行为(尽管我认为任何这样的程序都编写得不好)。

确实似乎解决了问题(希望静态没有问题)。现在要找到一种聪明的方法来获取一些根类的依赖项... - Gnoupi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接