- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个程序,需要很长时间才能加载。因此,我想开发一个启动画面,可以向用户提供有关正在加载的内容的反馈。带有图像、标签和 JProgressBar 的简单 JFrame。
我一直在试验,我得到的最好结果是在我的 main()
中这样做:
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new SplashScreen();
}
});
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
//Code to start system
new MainFrame();
//.. etc
}
});
SplashScreen 和 MainFrame 都是扩展 JFrame 的类。我也在使用 Substance 作为库。
SplashScreen 的构造函数将 JLabel 和 JProgressBar 添加到自身,打包并设置为可见。JProgressBar 是 setIndeterminate(true)
;
当我运行我的程序时,会显示我的 SplashScreen,但 ProgressBar 被锁定,它不会移动,直到程序的其余部分启动后它才会按预期开始移动。
我在这里错过了什么?我所做的所有搜索似乎都没有提到这个问题,而且大多数“自定义启动画面”实现都以与我非常相似的方式解决这个问题。
最佳答案
只是试图比 Allain 的正确答案更笼统一些。
您的系统中有一个线程可以(合法地)更新 GUI。
如果您正在使用该线程来初始化您的系统,guis 将不会更新。
如果您尝试从您的主线程更新您的 GUI,那么什么都不会正确。
始终注意您的 GUI 在哪个线程上,并确保不要在该线程上工作。
以这种方式思考 GUI 更新:
非 GUI 线程通常是来自 Thread.start 的线程和传递给“main”的线程
GUI 线程是执行您的“invokeLater”以及从 GUI 事件(按下按钮、GUI 计时器、任何 Swing 监听器)传递给您的任何内容的线程。
因此,大多数情况下,当需要更新 GUI 时,您已经在 GUI 线程上——只需注意启动顺序和线程想要更新显示的位置。
关于java - 自定义 Java 初始屏幕 "freezes",直到整个应用程序加载完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358093/
我搜索了很多东西,比如: How to show icon blinking on google map 但是根据这个我没有找到如何让通知图标闪烁 我想在这个上闪烁图标 int icon = R.d
我很想知道我是否可以删除或更改 android 在选项卡布局下方提供的类似 drop-shadow 的效果。 最佳答案 我一问这个问题,我就在另一个stackoverflow post中得到答案.无论
我必须通过 AlaramManager 调用我的 BroadcastReceiver。 为此,我所做的不起作用: AlarmActivity.java public class AlarmActivi
我正在尝试执行以下操作: CPU_COUNT=$(cat /proc/stat | grep -E "^cpu[[:digit:]]+ " | wc -l) let CPU_COUNT=CPU_COU
我是一名优秀的程序员,十分优秀!