JFrame Splash Screen启动屏运行时无法显示图片问题求助
Java Swing启动屏图片不显示修复方案
核心问题及修复步骤
- 组件添加时机与窗口可见性设置错误
你在CreateGui()方法中提前调用了f.setVisible(true),窗口渲染完成后再添加的组件默认不会自动刷新,导致图片无法渲染。请将setVisible(true)移动到所有组件添加完毕之后执行,或添加完组件后手动调用f.revalidate()+f.repaint()刷新容器。 - 组件叠加顺序错误
空布局下后添加的组件会覆盖在先添加的组件上方,你在构造方法最后才添加图片标签,导致图片被文字、进度条等控件遮挡。需要调整添加顺序,优先添加图片标签,再添加其他上层控件。 - 重复添加组件导致异常
你在addText、addProgressBar、addMessage等方法中已经调用过f.add()添加对应组件,构造方法末尾又重复执行了四次f.add(),重复添加组件会导致渲染逻辑异常,请删除构造方法末尾冗余的f.add()代码。 - 图片大小设置冲突
addImage()方法中先调用image.setBounds(20,30,200,300)设置了坐标和大小,紧接着又调用image.setSize(600,200)覆盖了宽高配置,多余的setSize调用会导致图片显示区域不符合预期,请删除该冗余代码。 - 相对路径加载逻辑失效
IDE悬停可预览图片是因为IDE以源代码目录为基准解析路径,程序运行时的工作目录通常是项目根目录,和源文件目录不一致导致相对路径找不到资源。请改用类加载器加载图片:
只需将// 替换原有image初始化代码 ImageIcon icon = new ImageIcon(SplashScreen.class.getResource("Calc.png")); JLabel image = new JLabel(icon);Calc.png放在和SplashScreen.class同目录下即可正常加载。 - 事件调度线程被阻塞
你在主线程直接执行runningPBar()中的循环+休眠逻辑,会阻塞Swing的事件调度线程,导致所有界面更新异常。请使用SwingWorker实现进度条更新逻辑,不要在主线程中执行休眠操作。
修复后构造方法参考
SplashScreen() { CreateGui(); addImage(); addText(); addProgressBar(); addMessage(); f.setVisible(true); // 所有组件添加完成后再显示窗口 runningPBar(); // 建议替换为SwingWorker实现 }
内容的提问来源于stack exchange,提问作者Tom Dunbar
相关产品推荐
相关产品推荐

