Java SLPASH屏幕/性能:启动期间初始化应用程序数据的正确方法,尤其是使用SLPASH屏幕

Java SLPASH屏幕/性能:启动期间初始化应用程序数据的正确方法,尤其是使用SLPASH屏幕,java,eclipse,startup,splash-screen,Java,Eclipse,Startup,Splash Screen,我正在尝试一个java桌面应用程序(我是一名学生) 在启动过程中,它必须处理四种数据: 1) 项目树(如eclipse项目树)查看数据 当前我使用XMLEncoder/XMLDecoder保存和重新加载XML文件 2) 用户偏好数据。例如字体、最近使用的文件等 当前使用java.util.prefs.Preferences 3) 类数据。一些工厂类,比如MenuFactory,util类,比如DatabaseUtil,FileUtil等等,它们有一些静态数据 当前我在这些类中使用静态初始值设定项

我正在尝试一个java桌面应用程序(我是一名学生)

在启动过程中,它必须处理四种数据:

1) 项目树(如eclipse项目树)查看数据

当前我使用XMLEncoder/XMLDecoder保存和重新加载XML文件

2) 用户偏好数据。例如字体、最近使用的文件等

当前使用java.util.prefs.Preferences

3) 类数据。一些工厂类,比如MenuFactory,util类,比如DatabaseUtil,FileUtil等等,它们有一些静态数据

当前我在这些类中使用静态初始值设定项来初始化默认数据

4) 与数据库相关的信息,例如连接配置、常用的数据库名称和表名称

当前使用java.util.Properties

我想改进的地方:

1) 用上述四种方式保存我的应用程序数据是否正确

2) 由于要加载的数据太多,在启动屏幕期间我应该做什么

是在启动时加载还是延迟到使用时加载

至少,我不想使用以下代码欺骗用户(不在有意义的时间更新进度条):

SwingWorker-worker=新的SwingWorker(){
@凌驾
受保护的Void doInBackground()引发异常{
对于(int i=0;i<50;i++){
Thread.sleep(100);//模拟加载
发布(i*2);//通知进度
}
返回null;
}

3) 我认为太多的静态初始化程序可能会减慢程序的启动,有什么建议吗?

如果你的应用程序是针对高端设备的,那么你当然可以在启动/启动屏幕期间加载大部分

但是,当您拥有低端设备以及目标设备时,问题就来了。对于一些低端设备,启动时加载太多数据会导致用于其他处理的内存非常少。一些imd甚至会导致崩溃


因此,这是一个你必须明智地做出的决定,如果它包含一些小数据,那么最好根据需要或在加载屏幕时进行加载。

不确定你欺骗用户的意思,但为什么不只是做大多数程序所做的事情,并让启动屏幕有一个
JProgressBar
显示Inialization的进度,一个一旦一切都完成,让程序屏幕可见。谢谢,你的意思是立即在doInBackground中加载数据,忽略SwingWorker[process(List chunks)]?但是通过这种方式,进度条是多余的,我们可以像eclipse一样,在有意义的时间加载数据并通知进度条吗?当然可以。相应地更新进度再次感谢,真正让我困惑的是,如果我们想在有意义的时间通知进度条,我们必须使用作业列表传递给SwingWorker进程方法,但每个作业都不相同,我应该为每个作业使用函数指针吗?还是任何其他方法?您可以看看示例
SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {

            @Override
            protected Void doInBackground() throws Exception {

                for (int i = 0; i < 50; i++) {
                    Thread.sleep(100);// Simulate loading
                    publish(i*2);// Notify progress
                }
                return null;
            }