File Exchange

image thumbnail


version (146 KB) by Ben Tordoff
Show a splash-screen during MATLAB application start-up.


Updated 01 Sep 2016

View Version History

View License

This class provides a splash-screen that you can show as your MATLAB application starts:
* Border-less window
* Ability to add text overlays
* Optional progress bar with configurable location

This is mainly useful when deploying applications using the MATLAB compiler and where your application takes a while to initialize.

Requires MATLAB R2010a or above.

Cite As

Ben Tordoff (2021). SplashScreen (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (28)

Jiri Hajek

Very nice tool. However, in a compiled executable, this splash opens up only in the last moments during the execution of startupFcn, long after hitting the Enter on the executable. To remedy this, I used the same image as a splash associated by the compiler (must be a splash.png in the same folder with executable), which gives me a primary splash right after starting the executable. Unfortunately, between these two splash screens, there is a sizeable time gap. Anybody having an idea how to cover the whole startup interval?

Ciccio Bongo

Sorry for request, how to insert in my original code? Thanks a lot.

Zhifeng Zhou


Fredrik Gustavsson

Great submission. To follow up Guy's comment below regarding window stacking, you can set the splash window on top permanently by adding:


after the lines of code that Guy provided.

??? Error using ==> SplashScreen>SplashScreen.SplashScreen at 56
Syntax error. You must supply both a window title and imagename.

How can i fix it?

Guy Championnet

Perfect, but especially if used as a progress bar, the window might not appear on top of the other windows, to deal with that:

after line 250 add:

and after line 311 add:

LITO Plzen



At line 244, you can modify the code to accommodate the second monitor. Something like:

% Old code start here:
% Resize and reposition the window
obj.Frame.setSize( obj.Icon.getIconWidth(), obj.Icon.getIconHeight() );
% pos = get(0,'MonitorPositions');
% x0 = pos(1,1) + (pos(1,3)-obj.Icon.getIconWidth())/2
% y0 = pos(1,2) + (pos(1,4)-obj.Icon.getIconHeight())/2

% New Code starts here:
screensize = get(0,'ScreenSize');
w = obj.Frame.getWidth();
h = obj.Frame.getHeight();
x0 = ceil((screensize(3)-w)/2);
y0 = ceil((screensize(4)-h)/2);

obj.Frame.setLocation( x0, y0 );


perfect !!!!!!!! I love it !!!!

Ben Tordoff

Right now there isn't a way to set the position programmatically. I guess I could make it settable. However, it should be picking the first monitor and centering the window there. Could you post the output of get(0,'MonitorPositions')?


Jun Guo

Hi Ben, thanks a lot for this file.

I have a problem displaying the splashscreen, as I have two monitors set as "extended" display. Once the SplashScreen runs, the screen shows "in the middle" of the two monitors, i.e., half of the splashscreen is in Monitor A and another half in Monitor B.

Is there any setting to position the splashscreen on the monitor?

Paulo Ferreira

Shivaputra Narke

If I use GUIDE to generate the GUI, where should I call
s = SplashScreen(...);
and when should I call

Shivaputra Narke

Ben Tordoff

OK, that's a little surprising. Maybe try putting a "drawnow" after opening it?

You are right that nothing will be shown until the MCR has been loaded/initialized. The only way around that is to write a wrapper around your executable that shows the splashscreen before launching the MATLAB deployed app. Obviously that would have to be written in something other than MATLAB (which requires the MCR!).

Dahai Xue

Hi Ben,
I am trying to use this for compiled programs and hope this will show up soon after the program icon is clicked. In general, it will take a while before anything can happen on the screen, probably because MCR has to be loaded. In my case, the program also goes to look for the paths of file I/O that are saved from the previous session. When I call this in the _OpeningFcn(), it did not show up until close to the end of waiting time. Wonder if there is a solution for it?
Thank you.

Ben Tordoff

Hi Canoe Commuter (great name, by the way - beats using the car!), the simple way to make the splashscreen stay up for a second or two is to use "pause(1)" (for 1 second) or similar. However this will block, not allowing anything else to happen, which may get annoying.

A slightly more sophisticated approach is to ensure it stays up for N seconds. In psuedo-code this might look something like:

showSplashForSecs = 2;

timer = tic;
elapsedTime = toc(timer);
if elapsedTime < showSplashForSecs
pause(showSplashForSecs - elapsedTime);

This should ensure that the splashscreen is always on for at least two seconds even if your application initializes really quickly. It will still block interaction whilst paused though.

Canoe Commuter

Great file! Thank you for sharing.

Problem: My application loads so fast there's no chance to read the splash screen. How can I make the screen stay up for a finite amount of time?

For others who are (like me) not experienced programmers: by trial-and-error I found that you insert the calling code into the GUI function called (your function's name)OpeningFcn.

Dahai Xue

Very nice. Quick question: If I use GUIDE to generate the GUI, where should I call
s = SplashScreen(...);
and when should I call

Ben Tordoff

Hi Andre, you must call this with a name for the window (i.e. a title) and the name of the image file you want it to show. For example: "s = SplashScreen('My App','myAppImage.png')". Type "help SplashScreen" for more information. If that still doesn't help you, let me know.


Andre Asfar

I have an error:

"Syntax error. You must supply both a window title and imagename"

What should I do?


Nice addition, thank you!

I have a problem in my standalone application: the application hangs when executing the 'delete(s)' command (the splash screen disappears before crashing). Do you have an idea why?

My workaround is to hide the splash screen instead:


Julián Francisco

Christophe Tilman

Christophe Tilman

Very nice.
Only one remark about figure position.
On my computer, root 'MonitorPositions' return [left,bottom,right,up] for each monitor instead of [left,bottom, width, height] as described in the matlab documentation.

so, I had to replace line 247 & 248 by those:
x0 = pos(1,1) + (diff(pos(1,[1 3]))-obj.Icon.getIconWidth())/2
y0 = pos(1,2) + (diff(pos(1,[2 4]))-obj.Icon.getIconHeight())/2

Note that this is not an issue if you use only one monitor or if your primary monitor is on the left of the secondary.

Ben Tordoff

Hi Dani, an update allowing the text shadows to be turned off is on its way. I don't think the Java tools I'm using allow animated GIFs to be viewed, so I don't think that can be supported in any easy way.

Cheers. Ben


Really, really nice - I wish I had it earlier.

Two questions:

1. Why can I not load animated GIFs? This would allow for even more dynamic splash screens.

2. It would be nice if one could control (deactivate) the text shadow, i.e. lines 100-110.

MATLAB Release Compatibility
Created with R2010a
Compatible with any release
Platform Compatibility
Windows macOS Linux
Tags Add Tags

Inspired: BacStalk, BiofilmQ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!