Java程序开始很慢。
我编写了一个JavaFX桌面软件。当我双击可执行jar时,显示窗口花费将近5秒。我认为JVM花了一点时间来加载这个类。
但是当我打开Eclipse时,会立即显示进度GUI。我怎么能像Eclipse那样做?它是否使用其他技术来显示没有JVM的GUI?
答案 0 :(得分:6)
'eclipse'可执行文件实际上是一个小型C程序(源代码是here)。
这将读取eclipse.ini,如果已指定则显示启动屏幕,然后使用eclipse.ini中指定的参数初始化JVM并启动主Eclipse Java代码。因此,JVM初始化和Java启动是在已经显示的启动画面的情况下完成的。
Java代码被赋予对启动窗口的引用,因此它可以在完成后更新进度并关闭窗口。
如果编写Eclipse RCP,则使用相同的代码启动RCP。
答案 1 :(得分:2)
秘诀是:哪些类用于显示"启动画面"?!
在这里猜测:eclipse人们对这段代码进行了微调。他们可能只在那里使用 AWT 组件。好吧,我保持纠正:他们根本没有使用 java 用于启动画面(参见其他答案)。没有惊喜。
除此之外,关于泼溅Java的轶事答案:很多年前我写了一个Swing应用程序。当然,客户需要一个漂亮的闪屏,带有公司徽标和进度条;显示已加载"模块的数量"。我使用摆动面板编写了第一个版本。该面板在15秒后出现(当时没有固态硬盘),3秒后达到100%。当时的解决方案:我写了一个新版本,其中包含最小数量的AWT组件。最后,那个闪屏看起来有点出价"不太好看" - 但是在说了3,5秒之后就出现了。
我认为我甚至篡改了类加载订单以确保所有"昂贵的"在之后加载了类我拉出了显示启动画面所需的东西。
(如果这不会导致"足够的延迟"介于"飞溅出现"以及"应用程序已满载" ......一个只需将它放在那里稍长一点,就可以简单地延长闪屏的生命周期。当然,你不能告诉客户这个; - )