【发布时间】:2014-01-06 03:34:14
【问题描述】:
我正在尝试一个 java 桌面应用程序(我是一名学生)。
启动时要处理四种数据:
1)项目树(如eclipse项目树)查看数据。
目前我使用 XMLEncoder/XMLDecoder 来保存和从 XML 文件重新加载。
2) 用户偏好数据。比如字体,最近的文件等等。
目前我正在使用 java.util.prefs.Preferences。
3)类数据。一些工厂类如MenuFactory,util类如DatabaseUtil,FileUtil等它们有一些静态数据。
目前我在这些类中使用静态初始化器来初始化默认数据。
4)数据库相关信息,如连接配置、常用数据库名、表名等。
目前我正在使用 java.util.Properties;
我想改进的地方:
1) 上述四种保存我的应用数据的方法是否正确?
2)由于要加载的数据太多,在启动画面时我应该怎么做。
在启动时加载它们还是延迟到使用它们的时间?
至少,我不想通过以下代码欺骗用户(不在有意义的时间更新进度条):
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;
}
3) 我认为太多的静态初始化器可能会减慢程序的启动速度,有什么建议吗?
【问题讨论】:
-
不知道你说的欺骗用户是什么意思,但是为什么不做大多数程序做的事情,让启动屏幕有一个
JProgressBar显示初始化的进度,一旦一切都完成了,使程序屏幕可见。 -
谢谢,您的意思是一次加载 doInBackground 中的数据而忽略 SwingWorker [ process(List
chunks)] ?但是这样一来,进度条就冗余了,能不能做个类似eclipse的东西,加载数据,在有意义的时间通知进度条? -
绝对可以。相应地更新进度
-
再次感谢,真正让我困惑的是,如果我们想在有意义的时间通知进度条,我们必须使用作业列表传递给 SwingWorker 流程方法,但每个作业都不是同样,我应该为每个作业使用函数指针吗?还是其他方式?
-
你可以看看this例子
标签: java eclipse startup splash-screen